子查看具有自动布局的 XIB

Posted

技术标签:

【中文标题】子查看具有自动布局的 XIB【英文标题】:Subviewing an XIB having Auto-layout 【发布时间】:2015-03-21 08:56:39 【问题描述】:

我创建了一个 XIB 并使用了 AutoLayout。如果我在 Preview Pan 中检查它,它会完美显示。

现在我尝试加载该 NIB,然后使用以下代码将其作为子视图添加到另一个 ViewController:

myNibView = [[NSBundle mainBundle]loadNibNamed:@"CustomNib" owner:self options:nil].lastObject;
myNibView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view myNibView];

这一次它分散了所有视图,如下图所示。

我启用了日志记录并检查了 SubView 的框架,但是 XIB(SubView) 的框架根据 UIViewController 的视图发生了变化,但 XIB 的子视图没有与之安排。

2015-03-21 14:38:13.527 [3015:77723] newSubview.frame before = 0, 0, 420, 613
2015-03-21 14:38:13.633 [3015:77723] containerView.bounds after = 0, 0, 320, 504
2015-03-21 14:38:13.634 [3015:77723] newSubview.frame after = 0, 0, 320, 504

有什么想法,如何将 XIB 作为子视图添加到另一个中,同时保留其自动布局约束以正常工作,就像在 XIB 中一样?

【问题讨论】:

【参考方案1】:

不要使用 myNibView.translatesAutoresizingMaskIntoConstraints = NO;因为它删除了视图中的所有约束

【讨论】:

【参考方案2】:

我通过将 XIB 的所有子视图与 ScrollView 一起移动到另一个 UIView 中来解决了这个问题。

等级制度是这样的,

XIB
--UIScrollView
----UIView 1
----UIView 2
----UIView 3
.
.

但现在我将其更改如下,

XIB
--UIView
----UIScrollView
------UIView 1
------UIView 4
------UIView 3
.
.
.

它奏效了。

【讨论】:

以上是关于子查看具有自动布局的 XIB的主要内容,如果未能解决你的问题,请参考以下文章

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

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

xib 中的自动布局 - 子视图的高度与导航栏和标签栏之间的空间成正比

带有子视图的自动布局 NSCollectionView

如何在不使用自动布局的情况下以 XIB/故事板大小查看手机尺寸

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