是否可以自动调整UILabel框/边界的大小以适合包含的文本? (我不在乎它最终会不会比显示屏大)
因此,如果用户输入"hello"或"我的名字真的很长,我希望它适合这个框",它永远不会被截断,标签也会相应地"加宽"?
是否可以自动调整UILabel框/边界的大小以适合包含的文本? (我不在乎它最终会不会比显示屏大)
因此,如果用户输入"hello"或"我的名字真的很长,我希望它适合这个框",它永远不会被截断,标签也会相应地"加宽"?
请看我的要点,我为非常相似的东西做了一个UILabel
的分类,我的分类让UILabel
拉伸它的高度来显示所有的内容:https://gist.github.com/1005520
或查看此帖子:https://stackoverflow.com/a/7242981/662605
这会拉长高度,但您可以很容易地改变它,以另一种方式工作,然后像这样拉长宽度,这就是我相信您想要做的:
@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
您可以更简单地使用UIView
类提供的sizeToFit
方法,但是为了安全起见,将行数设置为1.
如果您使用的是AutoLayout,那么您有一个内置的解决方案.通过将行数设置为0,框架将适当调整标签大小(增加更多高度),以适合文本.
sizeWithFont:
已弃用,因此请改用sizeWithAttributes:
:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}