Lütfen UILabel
çok benzer bir şey için bir kategori yaptığım özgeçmişime göz atın , kategorim UILabel
tüm içeriği göstermek için yüksekliğini uzatır: https://gist.github.com/1005520
Veya bu gönderiye göz atın: https://stackoverflow.com/a/7242981/662605
Bu, yüksekliği uzatır, ancak başka bir şekilde çalışmak ve genişliği böyle bir şeyle genişletmek için kolayca değiştirebilirsiniz, yani ne yapmak istediğinize inanıyorum:
@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
Sınıfta bulunan sizeToFit
yöntemi daha basit bir şekilde kullanabilirsiniz UIView
, ancak satır sayısını güvende olacak şekilde 1 olarak ayarlayabilirsiniz.
iOS 6 güncellemesi
AutoLayout kullanıyorsanız, yerleşik bir çözümünüz vardır. Satır sayısını 0 olarak ayarladığınızda, çerçeve etiketinizi metninize sığacak şekilde yeniden boyutlandıracaktır (daha fazla yükseklik ekleyerek).
iOS 8 güncellemesi
sizeWithFont:
kullanımdan kaldırıldı, sizeWithAttributes:
bunun yerine şunu kullanın:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}