Xcode 8:在单个视图中可以同时使用约束和自适应吗?

11

在您为UI组件添加约束之前,可以使用自适应大小选项。

那么我可以同时使用两者来处理我的ViewController吗?输入图片描述

3个回答

7

你可以这样做,但是你不应该这样做。

对于一些视图,你可以使用约束(constraints),而对于另一些视图,你可以使用自动调整尺寸(autosizing),但要小心不要在同一个视图上混合使用它们,因为这将导致问题(自动调整尺寸信息将丢失)。

iOS通过创建传达自动调整尺寸信息给约束引擎的约束来处理自动调整尺寸的视图。这种行为可以通过名为translatesAutoresizingMaskIntoConstraints property的属性启用或禁用。

你可以尝试向视图添加约束并仍然以旧有方式进行自动调整尺寸,方法是将此值设置为true,但我建议你对每个视图都使用约束,因为它可以完成自动调整尺寸能做的一切,还可以更多。


补充一下:只需使用约束即可,您可以将其用于大多数布局。设置框架需要很多工作,并且不应经常进行。 - vrwim

4

在Xcode 8中,您可以(对单个视图内的子视图使用约束和自动调整大小的混合)来实现。请参见:

02:38 https://developer.apple.com/videos/play/wwdc2016/236/

使用Xcode 8,每个视图的translatesAutoresizingMaskIntoConstraints属性由Interface Builder自动维护:

  • 默认情况下,当第一次添加子视图时,该属性的值为true。
  • 当添加第一个约束到子视图时,该值会自动设置为false,并且Size Inspector窗格会更改为Constraints视图。
  • 当最后一个约束从子视图中删除时,该属性的值会自动恢复为true,并且Size Inspector将恢复为Autoresizing视图。

0
  • 如果您通过编程创建一个视图,Xcode 将生成 constraints 来满足自动调整大小 (translatesAutoresizingMaskIntoConstraints 被设置为 true)。但是,如果您在 IB 中创建一个视图,Apple 表示:

如果您在 Interface Builder 中添加视图,则系统会自动将此属性设置为 false。

  • 为了反映这一点,在Xcode 8之前添加到 IB 中的任何视图都隐藏了该选项(或者至少有一段时间我没有看到它)。

但是问题就在于:

  • 自从Xcode 8,该选项可见(translatesAutoresizingMaskIntoConstraints 被设置为 true),直到您添加任何约束,因此 Apple 上面的文本实际上不正确。

所以在单个视图中,您不能同时使用两个功能。视图(自动调整大小和约束)

在子视图中,您可以为每个子视图使用不同的方法,但这将会很混乱,我无法想象出合理的用途。view->subview(constraints)和subview(autoresizing) 这也意味着你可以使用例如view(autoresizing)->subview(constraints)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接