将translatesAutoresizingMaskIntoConstraints设置为所有子视图

Mar*_*tes 2 constraints uitableview uikit ios swift

有人知道将所有子视图的translatesAutoresizingMaskIntoConstraints 设置为 false 的含义吗?

考虑以下:

extension UIView {
    public func setAutoresizingMaskIntoConstraintsForAllSubviews() {
        for v in self.subviews {
            v.translatesAutoresizingMaskIntoConstraints = false
        }
    }
}
...
let cell = UITableViewCell()
cell.setAutoresizingMaskIntoConstraintsForAllSubviews() //or
cell.contentView.setAutoresizingMaskIntoConstraintsForAllSubviews()
Run Code Online (Sandbox Code Playgroud)

根据我的测试,一切正常。我没有看到与任何 UIKit 组件有任何约束冲突。

根据苹果的文档:

默认情况下,对于您以编程方式创建的任何视图,该属性都设置为 true。如果您在 Interface Builder 中添加视图,系统会自动将此属性设置为 false。

https://developer.apple.com/reference/uikit/uiview/1622572-translatesautoresizingmaskintoco

Don*_*Mag 5

虽然这可能没有什么本质上的错误......

首先,这不会影响子视图的子视图,除非你让它递归。

其次,如果你确实让它递归,你最终将设置诸如滚动视图滚动指示器、按钮背景图像视图等的属性。

第三,既然您这样做是因为您正在以编程方式创建视图,那么为什么不在该代码中显式设置该值呢?

而且,一般来说,因为不确定发生了什么而盲目地向某事物扔出一段“包罗万象”的代码是一个非常糟糕的主意。