【问题标题】:How to debug layout with Multiline UILabel / autolayout in notification content extension如何在通知内容扩展中使用多行 UILabel / 自动布局调试布局
【发布时间】:2017-07-17 13:31:57
【问题描述】:
如何调试以下问题?有没有办法解决这个问题?
iOS 10.2 及以下版本在布局多行 UILabel 时似乎存在错误。
我有一个相当简单的 UIView 子类,我在应用程序和通知内容扩展中都使用它,如下所示:
在主应用程序中,一切都布置得很好:
在 iOS 10.2 及更低版本的通知内容扩展中显示时,布局被破坏。但只有当文本足够长可以分成多行时。似乎iOS无法计算整个视图的正确高度:
不过,这个问题似乎在 iOS 10.3 和更新版本上得到了修复:
【问题讨论】:
标签:
ios
uilabel
ios-autolayout
usernotifications
usernotificationsui
【解决方案1】:
我开始尝试使用子视图,特别是通过设置固定高度约束。
原来,导致计算整体高度问题的不是标签,而是顶部视图上的纵横比约束(宽度:高度) .
根据视图的宽度以编程方式计算高度并为受影响的视图设置高度约束有助于解决问题:
public override func updateConstraints() {
super.updateConstraints()
if #available(iOS 10.2, *) {
imageContainerHeightConstraint.isActive = false
} else {
// FIX: multiline label / aspect ratio / autolayout bug in iOS < 10.2
let ratio: CGFloat = imageContainerAspectRatioConstraint.multiplier
imageContainerHeightConstraint.constant = round(bounds.width/ratio)
imageContainerHeightConstraint.isActive = true
}
}