【问题标题】:UIView.translatesAutoResizing is false in viewDidLoad(), true in viewDidLayoutSubviews()UIView.translatesAutoResizing 在 vi​​ewDidLoad() 中为 false,在 viewDidLayoutSubviews() 中为 true
【发布时间】:2018-09-06 12:08:52
【问题描述】:

我有一个普通的旧 UIView,在 IB 中创建,所以它的 translatesAutoresizingMaskIntoConstraints 标志应该设置为 false。果然,它——在viewDidLoad()。但是当viewDidLayoutSubviews() 出现时,该值已变为true。当然,翻译产生的约束与我自己的约束之一冲突。

这个标志是如何或在哪里被改变的?

结果是我得到了心爱的“无法同时满足约束”控制台输出。但是将 viewDidLayoutSubviews() 中的标志改回 false 可以解决冲突。所以我知道要做什么,但我不明白为什么。 (是的,我已经清理了项目并重新启动了 Xcode。)

【问题讨论】:

  • FWIW,检查 Storyboard 的 XML,all 视图将 translatesAutoresizingMaskIntoConstraints 标志设置为 "NO"。项目确实 开始时没有自动布局,这是后来添加的。不知何故,标志是“粘性的”。

标签: uiview ios-autolayout autoresizingmask


【解决方案1】:

Apple 文档明确指出,当 Storyboard 设置为使用自动布局,并且其中一个视图没有约束时,iOS 会设法给它一些约束。令人惊讶的是所选择的机制:操作系统在布局之前自动将 translatesAutoresizingMaskIntoConstraints 标志设置为 true

这也是我可能使用过的一种方法:通过轻按一个开关,操作系统确保约束的自动生成采用与以编程方式创建的视图相同的 IB 创建视图的代码路径。 (默认情况下将标志设置为 true。)

在我的例子中,我在以编程方式创建新约束之前清除代码中预先存在的约束。但我猜想translatesAutoresizingMaskIntoConstraints 标志的神奇重新设置发生在这两个操作之间。

【讨论】:

    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    相关资源
    最近更新 更多