2015-01-02 24 views
7

Sto tentando di creare una classe IBDesignable che può avere uno sfondo trasparente quando viene renderizzata in Interface Builder. Finora, ho ottenuto sfondi neri opachi. Ho creato una semplice dimostrazione del problema:Chiaro Le viste IBDesignable hanno uno sfondo nero

Ho inserito un UIView in questa scena in Interface Builder. Non puoi vederlo perché il suo sfondo è chiaro. Questo è quello che dovrebbe essere la scena nel formato.

A screenshot of an empty scene in interface builder

L'unica differenza in questo screenshot è che ho impostato la classe del nostro punto di vista in precedenza invisibili di essere 'DesignableView'.

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

Ecco l'intera implementazione della classe DesignableView:

#import <UIKit/UIKit.h> 

IB_DESIGNABLE 
@interface DesignableView : UIView 
@end 

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

C'è un modo per dare al IBDesignable visualizzare il corretto, sfondo trasparente?

+0

Se non si utilizza 'drawRect:' si dovrebbero commentare fuori; effettua le prestazioni. Questo potrebbe anche essere il problema – Chris

+0

È vero avere un'implementazione vuota di 'drawRect:' è una cattiva idea, tuttavia quel punto non è rilevante per questa domanda. In questo esempio, la funzione 'drawRect:' è vuota perché è il modo più semplice per riprodurre il problema di avere uno sfondo nero in IB. – BradB

risposta

10

Ho appena ricordato come ho risolto questo problema. È necessario eseguire l'override layoutSubviews

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

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

Grazie, Chris! Funziona alla grande Ho scoperto che questo trucco funziona anche quando la chiamata per impostare 'self.backgroundColor' è fatta nella funzione' prepareForInterfaceBuilder', che potrebbe essere un posto preferibile. – BradB

Problemi correlati