iOS 9 多行标签在集合可重用标题 View 中自动布局不起作用

标签 ios autolayout ios9 xcode7

iOS 8.4:

Multi-line label works in iOS8.4

在 iOS 9 上完全相同的代码:

Multi-line label doesn't work in iOS9

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

在 iOS 9 上,第二行在 View 首次加载时显示一瞬间,然后缩回到单行状态。此 View 是一个 header 集合可重用 View

我尝试删除标题 View 中的所有其他 View 和不相关的约束,同时只留下有问题的标签(具有 3 个约束),但仍然产生类似的结果,因此它不可能是由 View 中的其他约束引起的。 All other views removed, still same results

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

编辑 1:

UILabel 的配置:

Attributes Layouts

编辑 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];
}

引用:

https://stackoverflow.com/a/20287811/2491738

关于iOS 9 多行标签在集合可重用标题 View 中自动布局不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33212315/

相关文章:

swift - 添加多个 UI 元素并一起约束

ios - 使用布局 anchor 将 UiTableView 固定到( View Controller ) View

iOS9导致iPhone 5优化丢失

ios - 如何找出 App Transport Security 阻止了哪些 HTTP 请求?

ios - BSImagePickerViewController 用于快速从图库中选择视频

ios - Collection View 滞后于某些字符串

ios - 如何在 TabBarContoller 的两个 View Controller 之间传递数据,其中第一个 View Controller 是 TableViewController

ios - Swift 3 NSMutableURLRequest 第二次调用失败

objective-c - 从应用程序委托(delegate)中关闭模态视图 Controller

ios - Stackview 轴更改被延迟