我想在 Storyboard 中打开/关闭单个 View Controller 的自动布局(我相信称为场景)
当我转到 Storyboard 中的特定场景并更改检查器中的 Use Auto Layout
复选框时,我会为整个 Storyboard 场景打开/关闭自动布局。
我无法理解这种行为,因为一方面这个复选框看起来像是特定场景的属性而不是整个 Storyboard,其次我不明白为什么一个场景布局与其他场景有关系。
这可能吗?是否可以在 Storyboard 中或仅在代码中实现?
最佳答案
“使用自动布局”复选框看起来可能是针对特定场景的,但正如您所发现的,它是针对整个“Interface Builder 文档”(即整个 Storyboard)的。因此,如果您不想在特定场景中使用自动布局,那么您只能使用一些替代方案:
您可以将这个其他场景放在不同的 Storyboard或 NIB 中,并以编程方式在 View Controller 之间转换。如果这样做,您将失去 Storyboard的许多好处(例如,您不能只在 IB 中来回创建转场,而是必须以编程方式在该场景之间来回切换)。
您可以保持启用自动布局,但是对于有问题的一个 View Controller ,您可以通过编程方式:
删除 IB 可能添加的任何约束(尤其是在 Xcode 6 中);
为各种控件调整
autoresizingMask
。如果您希望您的autoresizingMask
得到尊重,您可能需要打开translatesAutoresizingMaskIntoConstraints
;和如果使用 Xcode 6,您可能还想关闭“使用大小类”,以便为目标设备正确布置场景。
因此,在 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
设置为什么完全取决于您(在本例中,我将标签放在场景的中心,所以当我转到风景时,上面的标签会保持居中),但是希望这能说明这个想法。
坦率地说,鉴于在自动布局中无法轻松表达的自动调整大小蒙版无能为力,我倾向于坚持使用自动布局,并且您消除了上述方法的尴尬。
关于ios - 如何在 Storyboard中为单个 View Controller 打开/关闭自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592239/