2015-01-02 6 views
7

Ich versuche eine IBDesignable-Klasse zu erstellen, die einen transparenten Hintergrund haben kann, wenn sie in Interface Builder gerendert wird. Bis jetzt habe ich undurchsichtige schwarze Hintergründe bekommen. Ich habe eine einfache Demonstration des Problems eingerichtet:Klare IBDarstellbare Ansichten haben einen schwarzen Hintergrund

Ich habe eine UIView in dieser Szene in Interface Builder platziert. Sie können es nicht sehen, da der Hintergrund klar ist. So sollte die Szene aussehen.

A screenshot of an empty scene in interface builder

Der einzige Unterschied in diesem Screenshot ist, dass ich die Klasse unserer vorher unsichtbaren Ansicht festgelegt haben ‚DesignableView‘ zu sein.

A screen shot of an Interface Builder scene with a black box in the middle

Hier ist die gesamte Umsetzung der DesignableView Klasse:

#import <UIKit/UIKit.h> 

IB_DESIGNABLE 
@interface DesignableView : UIView 
@end 

@implementation DesignableView 
- (void)drawRect:(CGRect)rect { 
    //rendering code goes here 
} 
@end 

Gibt es eine Möglichkeit der IBDesignable sehen den richtigen, transparenten Hintergrund zu geben?

+0

außer Kraft setzen Wenn Sie nicht 'drawRect mit:' Sie sollten es auf Kommentar; Es wirkt sich auf die Leistung aus. Das könnte auch das Problem sein – Chris

+0

Es ist wahr, eine leere Implementierung von 'drawRect:' zu haben ist eine schlechte Idee, aber dieser Punkt ist für diese Frage nicht relevant. In diesem Beispiel ist die Funktion 'drawRect:' leer, weil sie das Problem darstellt, einen schwarzen Hintergrund in IB zu haben. – BradB

Antwort

10

Ich erinnerte mich gerade, wie ich das repariere. Sie müssen layoutSubviews

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.backgroundColor = [UIColor clearColor]; 
} 
+2

Danke, Chris! Das funktioniert großartig. Ich habe festgestellt, dass dieser Trick auch funktioniert, wenn der Aufruf von 'self.backgroundColor' in der' prepareForInterfaceBuilder' -Funktion vorgenommen wird, was ein bevorzugter Ort sein könnte. – BradB