在您为 UI 组件提供任何约束之前,可以使用自动调整大小选项。
3 回答
你可以,但你不应该
您可以在某些视图上使用约束,并在其他视图上自动调整大小,但请注意不要将它们混合在同一个视图上,因为这会导致问题(自动调整大小信息将丢失)。
iOS 通过创建将自动调整大小的信息传递给约束引擎的约束来处理视图的自动调整大小。可以通过恰当命名的translatesAutoresizingMaskIntoConstraints 属性启用或禁用此行为。
您可以尝试将约束添加到视图,并通过将此值设置为 来使其按旧行为自动调整大小true
,但我建议您对每个视图都使用约束,因为它可以完成自动调整大小所能做的一切,等等。
是的,您可以在Xcode 8中(在单个视图中混合使用约束和自动调整子视图的大小)。看:
02:38 https://developer.apple.com/videos/play/wwdc2016/236/
在 Xcode 8 中,translatesAutoresizingMaskIntoConstraints
每个视图的属性都由 Interface Builder 自动维护:
- 默认情况下,当第一次添加子视图时,该属性的值为 true。
- 当第一个约束添加到子视图时,该值自动设置为 false,并且Size Inspector窗格更改为Constraints视图。
- 当从子视图中删除最后一个约束时,属性的值会自动恢复为 true,并且Size 检查器会恢复为Autoresizing视图。
- 如果您以编程方式创建视图,Xcode将生成
constraints
满足autoresizing
自己的要求(translatesAutoresizingMaskIntoConstraints
设置为true
)。但是,如果您在 IB 中创建视图,Apple会说:
如果在 Interface Builder 中添加视图,系统会自动将此属性设置为 false。
- 为了反映这一点,在Xcode 8之前添加到 IB 的任何视图都隐藏了该
autoresizing
选项(或者至少我在那里有一段时间没有看到它)。
但事情是这样的:
- 由于Xcode 8,该选项是可见的(
translatesAutoresizingMaskIntoConstraints
设置为true
),直到您添加任何约束,所以我猜上面的 Apple 文本实际上并不正确。
因此,在单一视图中,您不能同时满足/使用两者。视图(自动调整大小和约束)
在子视图中,您可以为每个子视图使用不同的,但这将是一团糟,我无法想象合理的用法。视图-> 子视图(约束)和子视图(自动调整大小)
这也意味着您可以使用例如view(autoresizing)->subview(constraints)