1

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

布局多行 UILabel 时,iOS 10.2 及更低版本似乎存在错误。

我有一个相当简单的 UIView 子类,我在应用程序和通知内容扩展中都使用它,如下所示:

界面生成器中的自定义 UIView 子类

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

在主应用程序中显示时的正确布局

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

iOS 10.2 中的布局损坏

但是,这个问题似乎在 iOS 10.3 和更新版本上得到了修复:

iOS 10.3 中的正确布局

4

1 回答 1

0

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

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

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

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
    }
}
于 2017-07-26T21:23:31.243 回答