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

Posted

技术标签:

【中文标题】ios:文本在 iPhone 5S 及更早版本(4 英寸及更小的设备)上无法正确换行【英文标题】:ios: text does not wrap correctly on iPhone 5S and earlier (4 inch and smaller devices) 【发布时间】:2016-01-25 14:14:16 【问题描述】:

我有一个应该环绕的标签。它有 4 个约束(顶部/底部和前导/尾随 - 没有其他约束)。标签在 iPhone 6 即 4.7" 屏幕和 iPhone 6 Plus 即 5.5" 屏幕上正确环绕,但在 4" 英寸或更小的屏幕设备上被切断。请参阅下面的屏幕截图。

就好像它认为可用宽度大于实际设备宽度。有任何想法吗? (抱歉不能内联发布图片,因为它需要至少 10 个代表)

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

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

【问题讨论】:

a.您支持的最早的ios是什么? b.Storyboard中的标签行数是0吗? c.你有没有在分配文本后尝试做 label.sizeToFit() ? 我不支持低于 iOS 9.0 的任何版本。是的,行数设置为 0。我认为这不是 sizeToFit 问题,因为它没有显示一长行文本。它正在包装,但在错误的位置。 @Quentin 感谢您将图像编辑为内联。 尝试删除约束并再次添加它们,但未选中“与边距相关”选项 @MatanGold 谢谢,实际上我已经尝试过了。没有帮助。 【参考方案1】:

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

尝试删除所有约束并重新添加它们

【讨论】:

【参考方案2】:

我发现了问题所在,这个label 位于TextCell 类型的单元格中,这是我在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)

【讨论】:

以上是关于ios:文本在 iPhone 5S 及更早版本(4 英寸及更小的设备)上无法正确换行的主要内容,如果未能解决你的问题,请参考以下文章

用 Swift 编写的代码可以在 iOS 7 及更早版本上运行吗? [复制]

UINavigationBar 在 iOS8 及更早版本中消失

TestFlight 是不是支持 ios7 及更早版本?

在具有部署目标 iOS 7.0 及更早版本的扩展包含应用程序中使用嵌入式框架

iTunes Connect 上传应用程序仅适用于 4 英寸(iPhone 5、iPhone 5s)

ios7及更高版本导致图像图标错误