我的应用程序包含一些文本数据。
从TableView用户选择一个单元格,然后查看带有相对文本数据的UIViewController。但是信息文本可以从1行到N.如何创建这样的UILabel,它会根据文本大小改变大小?
答案 0 :(得分:3)
在NSString UIKit Additions中,您可以找到以下方法:
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode
使用此标签可以定义标签的最佳高度或宽度。例如,要获得UILabel的最佳高度,可以使用以下方法在UILabel上创建类别:
- (float)optimalHeight
{
return [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(self.frame.size.width, UINTMAX_MAX) lineBreakMode:self.lineBreakMode].height;
}
之后,您只需更改UILabel的框架即可。不要忘记将标签的行数设置为0。
答案 1 :(得分:2)
您可以设置标签的numberOfLines
属性以指定它可以包装到的行数。如果将其设置为零,则可以换行到任意数量的行。您可以在笔尖中设置此属性。
但是,您还需要将其框架设置得足够大,以显示所有线条。最简单的方法是在设置文本后向其发送sizeToFit
消息。它将保持其宽度(我认为),但改变其高度足以在包裹后显示其所有线条。
如果您的文字太多而且不适合屏幕(或者不适合您的标签可用空间),则应使用UITextView
代替。 UITextView
允许自动滚动。
答案 2 :(得分:2)
另一个解决方案是使用sizeWithFont方法在代码中执行此操作。 您可以在此处找到更多信息:iOS: UILabel dynamic height using sizeWithFont:constrainedToSize:lineBreakMode: not working
如果高度变化,您可以设置最大标签尺寸,标准标签宽度和9999高度,然后使用标签字体检查文本的建议尺寸