iOS 9 multi-line 带有自动布局的标签在 collection 可重用 header 视图中不起作用

iOS 9 multi-line label with autolayout in a collection reusable header view not working

iOS 8.4:

iOS9 上的完全相同的代码:

如您所见,运行 在 iOS 8.4 上的完全相同的代码会产生与 iOS 9.

不同的结果

在 iOS 9 上,第二行 在第一次加载视图时 显示一瞬间 然后缩小 到它的单行状态。此视图是 Header Collection 可重用视图.

我尝试删除 header 视图中的所有其他视图和不相关的约束,同时只留下有问题的标签(有 3 个约束),但仍然产生类似的结果,所以它不可能是由其他约束引起的在视图中。

想知道是否还有其他人遇到过这种情况并且知道解决方案?

编辑 1:

UILabel 的配置:

编辑 2:

我在这里创建了一个演示项目:https://github.com/v-ken/TestMultilineUILabeliOS9。我找到问题的根源是reloadData。调用时,UILabel 缩回到单行。

编辑 3:

上面的演示 GIT 存储库现已更新为修复程序。

通过在 UIView 中设置 UILabelpreferredMaxLayoutWidth,最终设法使其适用于 iOS 9。

- (void)layoutSubviews {
    [super layoutSubviews];
    myLabel.preferredMaxLayoutWidth = myLabel.frame.size.width;
}

或者,如果您使用的是 UIViewController:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    myLabel.preferredMaxLayoutWidth = myLabel.frame.size.width;
    [self.view layoutIfNeeded];
}

参考: