ios - 如何在 Storyboard中为单个 View Controller 打开/关闭自动布局

标签 ios objective-c storyboard autolayout

我想在 Storyboard 中打开/关闭单个 View Controller 的自动布局(我相信称为场景)

当我转到 Storyboard 中的特定场景并更改检查器中的 Use Auto Layout 复选框时,我会为整个 Storyboard 场景打开/关闭自动布局。

我无法理解这种行为,因为一方面这个复选框看起来像是特定场景的属性而不是整个 Storyboard,其次我不明白为什么一个场景布局与其他场景有关系。

这可能吗?是否可以在 Storyboard 中或仅在代码中实现?

最佳答案

“使用自动布局”复选框看起来可能是针对特定场景的,但正如您所发现的,它是针对整个“Interface Builder 文档”(即整个 Storyboard)的。因此,如果您不想在特定场景中使用自动布局,那么您只能使用一些替代方案:

  1. 您可以将这个其他场景放在不同的 Storyboard或 NIB 中,并以编程方式在 View Controller 之间转换。如果这样做,您将失去 Storyboard的许多好处(例如,您不能只在 IB 中来回创建转场,而是必须以编程方式在该场景之间来回切换)。

  2. 您可以保持启用自动布局,但是对于有问题的一个 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/

相关文章:

ios - 为不是字符串的 UItextfield/UIlabel 分配一个可选值

ios - Objective-C 中的多重继承(UIRefreshControl 用法)

objective-c - NSImageView 不工作?

iOS : passing data between viewController (destination embedded in a NavigationController)

iphone - 通过 Storyboard的选项卡栏项目

ios - Core Data Stack 应该从 NSObject 继承吗?为什么?

iOS 10.1 , tabbar出现黑线

ios - 为什么我们不能在 UITableView、Objective C 上检测到 UITouch 逻辑

objective-c - 如何切换回已经加载的 UIViewController?

ios - View 不会像在 Storyboard 中那样出现在 iPhone 上