2014-08-31 83 views
15

我想开启/关闭自动布局在故事板的单一视图控制器(称为场景我相信)如何开启/关闭自动布局在故事板

当我去一个特定的单一视图控制器在故事板中的场景,并在检查器中更改Use Auto Layout复选框,我会为整个故事板场景启用/禁用自动布局。

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

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

+0

我建议坚持自动布局。如果传言4.7英寸的iPhone 6是真的,你会受益。在布局问题证明您头痛之前,彻底学习自动布局。 – 2014-08-31 13:32:28

回答

24

它看起来像这样“使用自动布局”复选框是针对特定场景的,但正如您发现的那样,它是针对整个“Interface Builder文档”(即整个故事板)的。因此,如果你不想在一个特定的场景中使用的自动布局,你被卡住了几个备选方案:

  1. 您可以把这个场景等以不同的故事板或NIB和过渡,并从视图控制器编程。如果你这样做,你就失去了很多故事板的好处(例如,你不能在IB中来回创建段落,而是必须以编程方式在这个场景之间进行转换)。

  2. 你可以继续启用自动布局启用,但随后有问题的一个视图控制器,你可以通过编程方式:

    • 删除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到完全取决于你(在这个例子中,我在场景中放置了一个标签,所以当我走到风景时,上面的标签保持居中),但是希望这可以说明这个想法。

坦率地说,因为没有什么可以与自动调整大小面具,你不能在自动布局轻松地表达做,我倾向于坚持使用自动布局,可以消除上述方法的尴尬。

+0

很好解释,谢谢 – Mario 2014-08-31 15:43:51

0

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

相关问题