使用自动布局的 xib 添加为子视图时不显示

Posted

技术标签:

【中文标题】使用自动布局的 xib 添加为子视图时不显示【英文标题】:xib using autolayout not showing when added as subview 【发布时间】:2015-08-07 16:45:05 【问题描述】:

我使用 xib 创建了一个 UIViewControllerA 以实现视图的可重用性。

在 xib 中,我只是添加了另一个红色视图,并将其约束设置为红色视图的超级视图(即我的 A 视图)的顶部、前导、尾随和底部空间。

A添加到另一个UIViewController B作为BChildViewController,这样做:

// UIViewControllerB.m

UIViewControllerA *A = [UIViewControllerA alloc] initWithNibName:@"UIViewControllerA" bundle: nil]];
[A.view setFrame:CGRectMake(0,0, self.view.size.width, self.view.size.height/2)];
[self addChildViewController:A];
[self.view addSubview:A.view];
[self.A didMoveToParentViewController:self];

没有任何红色或任何出现。

我确实尝试过[self.A.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 这似乎使我的约束无用,实际上并没有显示红色视图。

当我使用 xib 并需要一些带有自动布局的额外视图时,我是否必须编写整个事情(UI 元素和约束创建)?

感谢您的建议!

【问题讨论】:

请先证明 UIViewControllerA 实际上正在加载它的 xib 文件并在那里获取它的视图。 @matt 在初始化时加载笔尖。请参阅编辑后的代码。 如果 UIViewControllerA.xib 中较大的视图是一些奇怪的颜色,比如黄色,你看到 那个了吗?换句话说,让我们看看缺少的是红色的小视图还是整个东西。 @matt 我将红色视图的高度和宽度设置为与其超级视图相同。奇怪的是,只有当我没有向子视图(标签、按钮、视图...)添加任何约束时,才会出现一个但没有适当的位置。如果我编写所有代码,它就可以正常工作! ***.com/questions/26794718/… 这个问题的答案似乎证明了我的假设...... xib 不适用于自动布局。 【参考方案1】:

问题出在这一行:

[A.view setFrame:CGRectMake(0,0, self.view.size.width, self.view.size.height/2)];

相反,给这个视图约束

当您将一组使用自动布局的视图插入到一组使用自动布局的视图中时,您必须使用自动布局对其进行定位。

【讨论】:

好吧,我猜我错了..不是xib不适用于自动布局,但是在编译器知道superview是谁之前,这些约束不能很好地运行,这意味着它知道这些约束的基本依赖.谢谢@matt =)

以上是关于使用自动布局的 xib 添加为子视图时不显示的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UIView(.xib) 在 UITableViewCell 中添加为子视图后自动更改框架

自动布局 - 视图控制器框架不正确

子查看具有自动布局的 XIB

从 Xib 加载视图在自动布局后调整框架子视图的大小

iOS 自动布局 - xib 中的等高约束

渲染视图中的自动布局不会更新其框架