Vui lòng kiểm tra ý chính của tôi nơi tôi đã tạo một danh mục cho UILabel
một thứ gì đó rất giống nhau, danh mục của tôi cho phép UILabel
kéo dài chiều cao để hiển thị tất cả nội dung: https://gist.github.com/1005520
Hoặc xem bài đăng này: https://stackoverflow.com/a/7242981/662605
Điều này sẽ kéo dài chiều cao, nhưng bạn có thể thay đổi nó một cách dễ dàng để làm việc theo cách khác và kéo dài chiều rộng bằng thứ gì đó như thế này, đó là điều tôi tin rằng bạn muốn làm gì:
@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
Bạn có thể đơn giản hơn là sử dụng sizeToFit
phương thức có sẵn từ UIView
lớp, nhưng đặt số dòng thành 1 là an toàn.
Cập nhật iOS 6
Nếu bạn đang sử dụng AutoLayout, thì bạn đã có một giải pháp tích hợp. Bằng cách đặt số lượng dòng thành 0, khung sẽ thay đổi kích thước nhãn của bạn một cách thích hợp (thêm chiều cao) để phù hợp với văn bản của bạn.
Cập nhật iOS 8
sizeWithFont:
không dùng nữa nên sử dụng sizeWithAttributes:
thay thế:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}