staram się na dwa dni, aby zmodyfikować klatka UILabel
, który jest śmieszne ... The UILabel
jest IBOutlet, ale to nie jest powód, dlaczego nie działa: Starałem się stworzyć UILabel
programowo i nadal nie działa. Oto jak to zrobić:Dlaczego nie mogę zmienić ramki mojego 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;
Już zadawane na IRC i powiedziano mi, że nie ma powodu, dlaczego rama nie zostanie zmieniona ...
Próbowałem też stworzyć ramkę z CGRectMake
i daj mu dowolną wartość , ale to też nie wystarczy.
Czy ktoś wie, na czym może polegać problem?
Edit 1: Zalogowałem ramkę przed i po, i mam wyniki nieparzyste:
Before: 0.000000 0.000000 0.000000 0.000000
After: 0.000000 0.000000 0.000000 33525.000000
Wysokość po ustawić rama jest jedyną wartością, która ma sens (mam dużo tekst na etykiecie celowo).
Edit 2: Zmieniłem kod w następujący sposób, dziennik twierdzi, że rama zmieniło, ale na symulatorze nie uległa zmianie; Udowodniłem to, dodając czerwone granice do warstwy 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;
Czy rejestrowałeś ramkę przed i po? I dlaczego zmieniasz granice (szczególnie używając ramki, która znajduje się w innym miejscu współrzędnych)? – Wain
Zalogowałem ramkę przed i po, zgodnie z sugestią, i otrzymałem dziwne wyniki, które zawarłem w pytaniu, które zredagowałem. –
Dlaczego ustawiasz liczbę linii na 0 na końcu? – Abizern