我们可以加载具有自动布局的 XIB 作为以编程方式创建的没有自动布局的视图的子视图,并让子视图随父视图调整大小吗?

Can we load an XIB with auto layout as a subview of a view created programmatically without auto layout and have the subview resize with parent view?

背景:

场景: 我有一个以编程方式创建的超级视图,它出现在应用程序的所有屏幕中。现在我尝试加载一个 XIB 并将其作为子视图分配给这个父视图。它在 iPhone 中看起来不错(因为 XIB 的设计尺寸为 iPhone)。但是在 iPad 中,使用相同的 XIB,子视图保持 iPhone 维度。

有什么方法可以让这个设置在 iPad 上运行,让 XIB 调整大小以填满屏幕而不在子视图和父视图之间设置约束?

如果您认为有帮助,我将 post 现有的限制条件。

您应该在以编程方式创建视图后从 xib 添加约束。将其视为主视图的常规子视图。所以

  1. 从 xib 创建视图

    UIView *someView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([YOUR_VIEW_CLASS_NAME class]) owner:self options:nil] lastObject];

  2. 将其添加为子视图

    [yourSuperview addSubview: someView];

  3. 为上、下、左、右添加约束条件

NSDictionary *views = @{@"someView":self.background};

[yourSuperview addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"H:|[someView]|"
                      options:0
                      metrics:nil
                      views:views]];

[yourSuperview addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"V:|[someView]|"
                      options:0
                      metrics:nil
                      views:views]];
  1. 调用更新通过 [someView setNeedsLayout];

您可以通过在添加时设置子视图的框架或以编程方式向子视图添加约束来实现。

享受.. :)