Proszę sprawdzić moją treść, w której utworzyłem kategorię dla UILabel
czegoś bardzo podobnego, moja kategoria pozwala UILabel
rozciągnąć jej wysokość, aby wyświetlić całą zawartość: https://gist.github.com/1005520
Lub sprawdź ten post: https://stackoverflow.com/a/7242981/662605
Spowoduje to rozciągnięcie wysokości, ale możesz ją łatwo zmienić, aby pracować w drugą stronę i rozciągnąć szerokość za pomocą czegoś takiego, co oznacza, że wierzę, co chcesz zrobić:
@implementation UILabel (dynamicSizeMeWidth)
- (void)resizeToStretch{
float width = [self expectedWidth];
CGRect newFrame = [self frame];
newFrame.size.width = width;
[self setFrame:newFrame];
}
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize maximumLabelSize = CGSizeMake(CGRectGetWidth(self.bounds), CGFLOAT_MAX);
CGSize expectedLabelSize = [[self text] sizeWithFont:[self font]
constrainedToSize:maximumLabelSize
lineBreakMode:[self lineBreakMode]];
return expectedLabelSize.width;
}
@end
Mógłbyś po prostu użyć sizeToFit
metody dostępnej w UIView
klasie, ale dla bezpieczeństwa ustawić liczbę linii na 1.
Aktualizacja iOS 6
Jeśli używasz AutoLayout, masz wbudowane rozwiązanie. Ustawiając liczbę wierszy na 0, platforma odpowiednio zmieni rozmiar etykiety (dodając większą wysokość), aby dopasować ją do tekstu.
Aktualizacja iOS 8
sizeWithFont:
jest przestarzałe, więc użyj sizeWithAttributes:
zamiast tego:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}