使更改 UILabel 文本不触发自动布局

Posted

技术标签:

【中文标题】使更改 UILabel 文本不触发自动布局【英文标题】:make change UILabel text not trigger auto layout 【发布时间】:2015-02-10 02:28:36 【问题描述】:

我在情节提要中有一个视图控制器,并在控制器中将 UILabel 和 ui 集合视图组合在一起。但是,每次我更改 UILabel 文本时,它都会触发自动布局,这表明我得到了视图将布局和视图做了布局事件。我不想更改文本来触发自动布局。但是当我使用self.XCategoryLabel.translatesAutoresizingMaskIntoConstraints = NO;

它不起作用。

如何使 UILabel 文本更改不触发自动布局?我确实在这个控制器中使用了自动布局,但我不希望标签触发它。

【问题讨论】:

为什么不希望标签触发呢?布局是否对您的收藏视图有所影响? 我在另一个视图中有一些触摸事件,使用户可以平移和拖动,并且在使用此标签时,每次我更新 UICollectionView 的数据源时,我也会更改标签。但是如果标签触发自动布局,触摸事件会中断,不流畅 好吧,我不认为在设置字符串时使用自动布局时标签不会触发这些方法。你的平底锅怎么样?您是使用约束还是设置框架来移动视图?该视图是否使用自动布局? 我对骨架视图使用自动布局,但有些视图是由骨架视图内的代码创建的。当用户拖动或平移时,数据会发生变化,因此它会非常流畅地更新您。但是如果我使用这个标签,它会触发视图会布局和视图做布局事件,所以它会中断手势。我在想如果我在视图中添加这个标签会有帮助吗? 我不知道这是否会有所帮助。继续尝试(但我怀疑它会起作用)。你没有回答我的另一个问题。您是否通过修改约束或设置新框架来移动骨架视图? 【参考方案1】:

我在 Storyboard 中添加了一个视图,并为其添加了约束。然后我通过代码将 UILabel 添加到此视图中,并且 NOTLabel.translatesAutoresizingMaskIntoConstraints 设置为 NO

那么就不会触发viewDidLayout和viewWillLayout了。

【讨论】:

这不是完美的解决方案,但它确实解决了我的问题。我为标签添加容器视图的原因是试图将 UILabel 与其他视图隔离开来。您可以尝试直接在情节提要中添加 UILabel,并添加适当的约束,而不是将 translatesAutoresizingMaskIntoConstraints 设置为 NO。看看它是如何工作的

以上是关于使更改 UILabel 文本不触发自动布局的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局在 iOS 中根据文本长度更改 UILabel 宽度

使用自动布局使 UILabel 和 UITextField 彼此相邻

如何使用自动布局调整 UILabel 宽度以适合文本?

首次出现时无法在 UITableViewCell 中更改 UILabel 的框架(使用自动布局)

UILabel尺寸更改不会使用自动布局设置动画

UILabel 自动布局适合