【发布时间】:2015-01-11 04:21:03
【问题描述】:
我创建了一个示例项目来重现这一点。
我有一个带有 UILabel 的 xib 文件,它有一个固定的顶部、前导和尾随约束。我添加了一个 minHeight 约束并将行数设置为 0。
我将preferredMaxLayoutWidth 设置为Automatic(在xib 文件中检查)。
在 viewDidLoad 中,我有这个:
self.myLabel.layer.borderColor = [[UIColor redColor] CGColor]; self.myLabel.layer.borderWidth = 2.0f;
self.myLabel.text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
当我在 iPhone 6 或 6+ 上运行模拟器时,我得到了这个:
我不知道顶部和底部填充的来源,它与 UILabel 中显示的字符数量成正比。
我忘记了一些神奇的设置吗?它在 iPhone 4" 设备上运行良好。
现在,如果我不设置preferredMaxLayoutWidth,它就没有额外的填充,但这会破坏我在UILabel 中的多行。它切断了文本。我没有使用 Size-Class。
编辑:
因此,我对示例项目进行了一些更改,以匹配我实际项目的情况。我添加了一个 tableView(将顶部、前导、底部和尾随约束设置为其父视图)。 tableView 上的每个单元格都有 4 个标签。顶部标签对单元格的 contentView 具有顶部、前导和尾随约束,随后的标签对其上方的标签具有垂直约束。每个标签都有一个 heightGreaterThan 约束集和一个 widthGreaterThan 集。
这就是没有设置 preferredMaxLayoutWidth 时的样子(注意标签是如何限制为 1 行的)。
使用首选最大布局宽度。现在 UILabel 显示了整个内容,但在顶部和底部都有一个填充。
编辑2: 示例项目:https://www.dropbox.com/s/sdahx9njnsxiv98/MultiLineUILabel.zip?dl=1
【问题讨论】:
-
我的问题和你一模一样。我什至尝试通过添加几个像素来破解
preferredMaxLayoutWidth,但这个数字在很大程度上取决于屏幕的宽度以及在 iPhone 6、iPhone 6+ 和 iPhone 5 上呈现的不同。更不用说 iPad。不确定这是否是一个错误,或者是否有其他一些设置/黑客让它工作。 -
我也遇到了同样的问题,我没有使用自动布局。该问题仅出现在 iPhone 6 而不是 iPad 上。自动调整大小蒙版设置的组合没有任何区别。最终我通过清理、重启 XCode 和重建解决了这个问题。很奇怪,但它解决了单独清洁无法解决的问题。 XCode 6.1.1.
-
确保标签的首选宽度设置为自动且未在设置面板上选中显式。这解决了我使用自动布局时的问题。
-
链接已失效,请更新您的答案
标签: ios objective-c iphone ios8 xib