ios5 - UILabel 和 numberOfLines 以及 sizeToFit :

标签 ios5 uilabel text-size sizetofit

在 iOS 5 上。

我有一个最初放置在 Nib 中的 UILabel 元素。我希望 x 位置保持固定。我希望它占用 1 行或 2 行。如果超过两行,则应使用换行符设置来显示省略号。

我使用numberOfLines属性(property)和-sizeToFit

如果我设置 UILabel 的 numberOfLines属性设置为 0,它会正确地看到某些文本没有足够的空间,并在调用 -sizeToFit 后将其换行到第二行。但在极少数情况下,该行足够长,可以延伸到 3 行,我得到三行,这是我不想要的。如果我设置numberOfLines属性设置为 2,它实际上将整个事物拉伸(stretch)到一条线上,并将 Nib 中设置的初始框架拉长得多。

 CGRect titleFrame = [[self titleLabel] frame];
 [[self titleLabel] setNumberOfLines:0];
 [[self titleLabel] setText:newProductTitleText];
 [[self titleLabel] sizeToFit];
 CGRect newTitleFrame = [[self titleLabel] frame];

CGRect 只是让我能够在事后进行计算。所以设置numberOfLines为 0 有效,并且不会更改框架中的原始 origin.x,并且会将长文本分成多行,但不会将其限制为 2 行。设置numberOfLines属性为 2,当我阅读 Apple 文档时

This property controls the maximum number of lines to use in order to fit the label’s text into its bounding rectangle. The default value for this property is 1. To remove any maximum limit, and use as many lines as needed, set the value of this property to 0.

看来我应该能够将其设置为 2 并且仍然可以工作。我期望 sizeToFit当扩展以适应所有文本时,在正 X 和 Y 方向上扩展,但在 numberOfLines 时,它在负 X 方向上扩展设置为 0 以外的值。

预计到达时间:“自动调整大小”支柱设置为上部和左侧以将其固定在最小 x,y。

感谢您的见解。

最佳答案

我遇到了类似的问题,其中 -[UILabel sizeToFit] 不遵守我在 numberOfLines 设置为 2 时设置的最大宽度。以下是我解决该问题的方法:

    CGFloat titleMaxWidth = 200;
    CGFloat titleMinHeight = 30;
    CGFloat titleMaxHeight = 40;
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, titleMaxWidth, titleMaxHeight)]; // alternatively, you could do this in a nib
    titleLabel.numberOfLines = 0;
    titleLabel.text = @"The title label will be sized appropriately with this technique.";
    titleLabel.font = [UIFont boldSystemFontOfSize:16];
    [titleLabel sizeToFit];
    titleLabel.numberOfLines = 2;
    if (titleLabel.height > titleMaxHeight)
    {
        titleLabel.height = titleMaxHeight;
    }
    else if (titleLabel.height < titleMinHeight)
    {
        titleLabel.height = titleMinHeight;
    }

如您所见,我还想要标签的最小高度,因为 -sizeToFit 通常会使标签非常小,但如果您不关心最小值,则可以忽略该代码高度。 titleMaxHeight 的“神奇数字”40 来自实验并发现使用这种字体的 2 行标签实际上只需要 40px。这段代码中,-sizeToFit主要是用来让文本保持在宽度之内,并判断当我们有很短的文本字符串时是否可以减小初始高度40。

关于ios5 - UILabel 和 numberOfLines 以及 sizeToFit :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328077/

相关文章:

iOS,如何绘制文字的动态长度?

ios - 如何使用 Swift 3 在 Read More/Less 中设置自动调整的标签高度?

android - 如何更改微调器文字大小?

android - 抑制 XML 中的 Lint 警告

Javascript - 获取实际渲染的字体高度

ios - IOS如何实现多个同时自定义手势?

objective-c - 加载 View 之前,应用程序崩溃iOS> 6

iOS:移动版 Facebook 评论插件不断重新加载

objective-c - UIProgressView 和自定义轨迹和进度图像(iOS 5 属性)

ios - 重新加载表格后,UILabel的背景颜色变得清晰