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
类型的单元格中,这是我在TextCell
的layoutSubviews
方法中所做的:
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 及更早版本中消失
在具有部署目标 iOS 7.0 及更早版本的扩展包含应用程序中使用嵌入式框架