创建灵活的UILabel

时间:2012-02-29 07:24:09

标签: ios xcode uilabel

我的应用程序包含一些文本数据。

从TableView用户选择一个单元格,然后查看带有相对文本数据的UIViewController。但是信息文本可以从1行到N.如何创建这样的UILabel,它会根据文本大小改变大小?

3 个答案:

答案 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高度,然后使用标签字体检查文本的建议尺寸