ios:文本在 iPhone 5S 及更早版本(4 英寸及更小的设备)上无法正确换行

ios: text does not wrap correctly on iPhone 5S and earlier (4 inch and smaller devices)

我有一个应该环绕的标签。它有 4 个约束(top/bottom 和 leading/trailing - 没有其他约束)。标签在 iPhone 6 即 4.7" 屏幕和 iPhone 6 Plus 即 5.5" 屏幕上正确环绕,但在 4" 英寸或更小屏幕设备的右边缘被切断。请查看屏幕截图下面。

好像它认为可用宽度大于实际设备宽度。有任何想法吗? (抱歉不能 post 图像内联,因为它至少需要 10 次重复)

FWIW:这是标签上的约束(我用伪代码写这些,因为它们是在 IB 中设置的)。

label.top = top margin
label.bottom = bottom margin
label.leading = leading margin
label.trailing = trailing margin

在您的 main_storyboard 中,转到底部面板并单击紧凑尺寸检查器(或其他名称) 并选择了这个

尝试删除所有限制并重新添加它们

我发现了问题所在,这个 labelTextCell 类型的单元格中,这就是我在 TextCelllayoutSubviews 中所做的方法:

override func layoutSubviews() {
    super.layoutSubviews()

    // ... snip ...

    self.text.preferredMaxLayoutWidth = 375 // This is the offending line
}

preferredMaxLayoutWidth 更改为合理的值(例如 CGRectGetWidth(self.label.frame))修复它。

请注意,以上是对问题的简化,重点是 当您在 Cocoa Touch 中遇到自尺寸标签问题时,请始终检查 preferredMaxLayoutWidth 被设置为正确的值

这是一个相关问题(为我指出了正确的方向):UILabel not wrapping text correctly sometimes (auto layout)