Ho cercato per due giorni per modificare la cornice di un UILabel
, che è ridicolo ... Il UILabel
è un IBOutlet, ma non è questo il motivo per cui non funziona: ho cercato di creare un UILabel
programatically e ancora non ha funzionato. Ecco come lo faccio:Perché non posso cambiare il frame della mia UILabel?
self.descriptionLabel.text = description;
self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize textSize = [self.descriptionLabel.text sizeWithFont:[UIFont systemFontOfSize:12.0]
constrainedToSize:CGSizeMake(self.descriptionLabel.frame.size.width, FLT_MAX)
lineBreakMode:self.descriptionLabel.lineBreakMode];
CGFloat frameHeight = textSize.height;
CGRect frame = self.descriptionLabel.frame;
frame.size.height = frameHeight;
self.descriptionLabel.frame = frame;
CGRect bounds = self.descriptionLabel.frame;
bounds.origin.x = self.descriptionLabel.frame.origin.x + 10.0;
bounds.size.width = self.descriptionLabel.frame.size.width - 20.0;
self.descriptionLabel.bounds = bounds;
self.descriptionLabel.numberOfLines = 0;
ho già chiesto su IRC e mi hanno detto che non v'è alcun motivo per cui il telaio non sarebbe cambiato ...
Ho anche cercato di creare una cornice con CGRectMake
e dargli un valore arbitrario ma questo non ha fatto il trucco o ..
Qualcuno sa quale potrebbe essere il problema per favore?
Edit 1: mi sono collegato al telaio prima e dopo, e ho ottenuto risultati strani:
Before: 0.000000 0.000000 0.000000 0.000000
After: 0.000000 0.000000 0.000000 33525.000000
L'altezza dopo essere stata impostata la cornice è l'unico valore che abbia un senso (ho un sacco di testo nell'etichetta apposta).
Edit 2: Ho cambiato il codice come segue, il registro dice che il telaio cambiato, ma sul simulatore non cambiava; L'ho provato aggiungendo i bordi rossi allo strato di UILabel
.
self.descriptionLabel.text = description;
self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize textSize = [self.descriptionLabel.text sizeWithFont:[UIFont systemFontOfSize:12.0]
constrainedToSize:CGSizeMake(self.view.frame.size.width, FLT_MAX)
lineBreakMode:self.descriptionLabel.lineBreakMode];
CGFloat frameHeight = textSize.height;
CGRect frame = CGRectMake(0.0, 300.0, self.view.frame.size.width, frameHeight);
self.descriptionLabel.frame = frame;
DDLogInfo(@"After: %f %f %f %f", self.descriptionLabel.frame.origin.x, self.descriptionLabel.frame.origin.y, self.descriptionLabel.frame.size.width, self.descriptionLabel.frame.size.height);
// After: 0.000000 300.000000 320.000000 585.000000
self.descriptionLabel.numberOfLines = 0;
self.descriptionLabel.layer.borderColor = [UIColor redColor].CGColor;
self.descriptionLabel.layer.borderWidth = 2;
Hai registrato il frame prima e dopo? E perché stai cambiando i limiti (in particolare utilizzando la cornice, che si trova in uno spazio di coordinate diverso)? – Wain
Ho registrato il frame prima e dopo come suggerito e ho ottenuto risultati strani che ho incluso nella domanda che ho editato. –
Perché stai impostando il numero di linee su 0 alla fine? – Abizern