Bitte überprüfen Sie meine Liste, in der ich eine Kategorie für UILabel
etwas sehr Ähnliches erstellt habe. In meiner Kategorie kann eine UILabel
Strecke ihre Höhe anzeigen , um den gesamten Inhalt anzuzeigen : https://gist.github.com/1005520
Oder lesen Sie diesen Beitrag: https://stackoverflow.com/a/7242981/662605
Dies würde die Höhe dehnen, aber Sie können es leicht ändern, um in die andere Richtung zu arbeiten und die Breite mit so etwas zu dehnen. Ich glaube, was Sie tun möchten:
@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
Sie können einfacher die in sizeToFit
der UIView
Klasse verfügbare Methode verwenden , aber die Anzahl der Zeilen aus Sicherheitsgründen auf 1 setzen.
iOS 6 Update
Wenn Sie AutoLayout verwenden, verfügen Sie über eine integrierte Lösung. Wenn Sie die Anzahl der Zeilen auf 0 setzen, ändert das Framework die Größe Ihrer Beschriftung entsprechend (indem Sie mehr Höhe hinzufügen), um sie an Ihren Text anzupassen.
iOS 8 Update
sizeWithFont:
ist veraltet, verwenden Sie sizeWithAttributes:
stattdessen:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}