如何打开/closures故事板中单个视图控制器的自动布局

我想打开/closures故事板中的单个视图控制器的自动布局(我相信被称为场景)

当我转到故事板中的特定场景并更改检查器中的“ Use Auto Layoutcheckbox时,我会为整个故事板场景启用/禁用自动布局。

我无法理解这种行为,因为对于其中一个checkbox看起来像一个特定场景的属性,而不是整个故事板,第二我不明白为什么一个场景布局与其他场景有什么关系。

这甚至有可能吗? 故事板或可能仅在代码中可能吗?

它可能看起来像这样“使用自动布局”checkbox是针对特定的场景,但正如您发现的,它是整个“界面生成器文档”(即整个故事板)。 因此,如果你不想在特定的场景中使用自动布局,你会遇到几个select:

  1. 您可以将其他场景置于不同的情节提要或NIB中,并以编程方式在视图控制器之间切换。 如果你这样做的话,你将失去许多故事板的好处(例如,你不能在IB中来回创buildsegues,而是必须以编程方式从这个场景转换)。

  2. 您可以保持自动布局启用,但对于一个视图控制器有问题,您可以编程方式:

    • 删除IB可能添加的任何约束(特别是在Xcode 6中);

    • 调整您的各种控件的autoresizingMask 。 如果你想让你的autoresizingMask得到尊重,你可能需要打开translatesAutoresizingMaskIntoConstraints ; 和

    • 如果使用Xcode 6,则可能还需要closures“使用大小类”,以便为目标设备正确布置场景。

    所以,按照IB想要的方式摆放我的标签,我可以:

     - (void)viewDidLoad { [super viewDidLoad]; [self.view removeConstraints:self.view.constraints]; [self.label removeConstraints:self.label.constraints]; self.label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; self.label.translatesAutoresizingMaskIntoConstraints = YES; } 

    显然,你设置autoresizingMask完全取决于你(在这个例子中,我把一个标签集中在场景中,所以上面保持居中,因为我去风景),但希望这可以说明这个想法。

坦率地说,由于在自动布局中无法轻松expression自动化的蒙版,所以我会倾向于使用自动布局,并且消除上述方法的尴尬。

您可以将单个视图控制器的布局移动到单独的xib文件并以编程方式加载。 如果你不想定义自己的约束条件,你可以把你的控制器放在故事板中,而不需要添加约束条件。 在这种情况下,基于VC的子视图的框架,将在运行时为您自动生成约束。