2014-11-29 17 views
6

Attualmente ho creato un'etichetta indietro per lo sfondo e aggiunto UIButton su UILabel. Viene mostrato in iOS 7 ma in iOS 8 non viene mostrato. Se sostituisco UILabel con UIView, funziona perfettamente.UILabel non mostra sottoview in iOS8

Se uso UILabel in iOS 8 utilizzando questo codice per mostrare UILabel e visualizzazione secondaria UIButton

UILabel *downLabel = [[UILabel alloc]init]; 
downLabel.frame = CGRectMake(0, SCREEN_HEIGHT*0.92, SCREEN_WIDTH,SCREEN_HEIGHT*0.08); 
[downLabel setBackgroundColor:[UIColor colorWithRed:(66/255.f) green:(67/255.f) blue:(63/255.f) alpha:1]]; 
downLabel.userInteractionEnabled = YES; 
[self.view addSubview:downLabel]; 

UIButton *downbtnobj = [[UIButton alloc]initWithFrame:CGRectMake(SCREEN_WIDTH*0.68,downLabel.frame.size.height/10,SCREEN_WIDTH*0.30,downLabel.frame.size.height/1.25)]; 

UIImage *btndownImage = [UIImage imageNamed:@"img 3.png"]; 
[downbtnobj setImage:btndownImage forState:UIControlStateNormal]; 
[downbtnobj addTarget:self action:@selector(bulletInButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 
[downLabel addSubview:downbtnobj]; 

enter image description here

Ora è possibile visualizzare solo UILabel sta mostrando, ma il pulsante non è visibile sul UILabel.

Un altro questo Se sostituisco UILabel con UIView, è perfetto.

UIView *downLabel = [[UIView alloc]init]; 
downLabel.frame = CGRectMake(0, SCREEN_HEIGHT*0.92, SCREEN_WIDTH,SCREEN_HEIGHT*0.08); 
[downLabel setBackgroundColor:[UIColor colorWithRed:(66/255.f) green:(67/255.f) blue:(63/255.f) alpha:1]]; 
downLabel.userInteractionEnabled = YES; 
[self.view addSubview:downLabel]; 

UIButton *downbtnobj = [[UIButton alloc]initWithFrame:CGRectMake(SCREEN_WIDTH*0.68,downLabel.frame.size.height/10,SCREEN_WIDTH*0.30,downLabel.frame.size.height/1.25)]; 
    UIImage *btndownImage = [UIImage imageNamed:@"img 3.png"]; 
[downbtnobj setImage:btndownImage forState:UIControlStateNormal]; 
[downbtnobj addTarget:self action:@selector(bulletInButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 
[downLabel addSubview:downbtnobj]; 

In questo codice è possibile vedere Sostituire solo UILabel di UIView. Ora viene visualizzato il pulsante. enter image description here

Può alcun aiuto perché subviews non viene visualizzata sul UILabel in iOS 8

+0

stai facendo questo in un metodo del ciclo di vita (viewDidLoad, viewWillAppear, ecc)? – kpsharp

+0

Che ne dici se metti il ​​pulsante _in front_ dell'etichetta ma _non_ come sua sottoview? Funziona? Se è così, hai una soluzione per te proprio lì. – matt

+0

Sto facendo questo lavoro in viewDidLoad .. –

risposta

8

Non è chiaro ciò che è diverso sulle etichette in iOS 8, ma se si chiama layoutIfNeeded sull'etichetta, che risolve il problema (si ha bisogno di essere dopo aver impostato il telaio),

UILabel *downLabel = [[UILabel alloc]init]; 
downLabel.frame = CGRectMake(0, SCREEN_HEIGHT*0.92, SCREEN_WIDTH,SCREEN_HEIGHT*0.08); 
[downLabel layoutIfNeeded]; 
[downLabel setBackgroundColor:[UIColor colorWithRed:(66/255.f) green:(67/255.f) blue:(63/255.f) alpha:1]]; 
downLabel.userInteractionEnabled = YES; 
[self.view addSubview:downLabel]; 

dopo Edit:

I als o ho scoperto che se si imposta il testo (in qualsiasi momento dopo aver creato l'etichetta), viene visualizzato il pulsante.

+0

Bello. C'è sicuramente qualcosa di nuovo in iOS 8 su quando le etichette ottengono il layout e quale effetto ha sull'intera interfaccia.Ho avuto un sacco di problemi con questo nei primi beta di iOS 8 in particolare. – matt

+0

Grazie. Funziona .... –

+0

Funziona ancora su iOS 10. Va notato che l'impostazione di 'text' a' nil' può far scomparire nuovamente la sottoview, quindi mantenere il testo non nullo (anche a '" "' se appropriato) è probabilmente la migliore soluzione. – CupawnTae

1

modo molto semplice è necessario clipsToBounds impostata sul UILabel

downLabel.clipsToBounds = YES;

Problemi correlati