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

Posted

技术标签:

【中文标题】如何在通知内容扩展中使用多行 UILabel / 自动布局调试布局【英文标题】:How to debug layout with Multiline UILabel / autolayout in notification content extension 【发布时间】:2017-07-17 13:31:57 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

【参考方案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
    

【讨论】:

以上是关于如何在通知内容扩展中使用多行 UILabel / 自动布局调试布局的主要内容,如果未能解决你的问题,请参考以下文章

如何设置自适应多行 UILabel 文本?

具有自动布局的多行UILabel,如何在不更改标签框架的情况下根据内容调整字体大小?

多行 UILabel 与固有内容大小的 UILabel 宽度相同

在 Tableview 中,我想知道如何在单元格最后位置设置多行 UILabel

如何在多行 UILabel 中找到最后一个文本行的位置,或者让 UILabel 有 0 填充

iOS Autolayout 2 多行 UILabel 在 UITableViewCell 中具有额外的填充