如何在通知内容扩展中使用多行 UILabel / 自动布局调试布局

How to debug layout with Multiline UILabel / autolayout in notification content extension

如何调试以下问题?有没有办法解决这个问题?

iOS 10.2 及以下版本在布局多行 UILabel 时似乎存在错误。

我有一个相当简单的 UIView 子类,我在应用程序和通知内容扩展中使用它,它看起来像这样:

在主应用程序中,一切都布置得很好:

在 iOS 10.2 及以下版本的通知内容扩展中显示时,布局已损坏。但只有当文本足够长可以分成多行时。似乎 iOS 无法计算整个视图的正确高度:

但是,此问题似乎已在 iOS 10.3 及更高版本上得到解决:

我开始尝试使用子视图,特别是通过设置固定高度约束。

事实证明,导致计算总高度问题的不是标签,而是宽高比约束( width:height) 在最顶层的视图上。

根据视图的宽度以编程方式计算高度并为受影响的视图设置高度约束有助于解决此问题:

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
    }
}