以编程方式将 XIB 视图添加到具有边界的视图控制器 - 不居中

Posted

技术标签:

【中文标题】以编程方式将 XIB 视图添加到具有边界的视图控制器 - 不居中【英文标题】:Programatically add XIB View to View Controller with Bounds - Not Centered 【发布时间】:2015-02-24 14:16:01 【问题描述】:

我有一个 XIB 视图,它有一个子视图(红色方块),我使用约束垂直和水平居中。

如下所示:

我通过以下方式以编程方式将视图添加到视图控制器:

xibView.frame = self.view.bounds;
self.view addSubview:beerMenuAddView];

但是,xibView 和子视图(红色方块)不再垂直居中。看起来好像视图没有刷新/重新调整大小以考虑导航栏。

我确定这是一个简单的解决方法...但我不确定这里需要发生什么。

【问题讨论】:

【参考方案1】:

导航栏覆盖其下方的视图。此行为在 ios 7 中已更改。要使红色方块在视觉上居中,您有几个选择。

    设置 xibView.frame(高度和 x)值以考虑导航栏(如果您也显示状态栏,还有状态栏)使用的空间。 或者,可能是更好的选择,在 Interface Builder 中设计带有显示导航栏的 xibView,并调整约束以提供所需的居中。

【讨论】:

您好 picciano,感谢您的想法。 #2 听起来像是一个计划。但是,我试图通过在视图上使用“模拟指标”并添加一个假的“顶栏”来让它工作,然后我重新定位了我的子视图并重置了约束,但是当我添加子视图时它仍然没有t 搬家了。 我遇到过类似的情况。为了让约束按我想要的方式工作,我必须创建两个嵌套的子视图。外部视图具有定义导航栏下方整个区域的约束。内部视图具有固定的高度和宽度,但设置在其父视图的中心。 我明白了。那么嵌套视图距顶部的高度为 64 吗?其他所有东西都固定在两边。然后是垂直/水平居中的辅助子视图? 没错。不确定是否有更好的方法来做到这一点,但我以前使用过这种技术。 picciano,这段代码看起来如何?我不确定如果手机侧面旋转,约束将如何起作用。我不应该没有硬编码的 64px 值吗?感谢您的帮助...

以上是关于以编程方式将 XIB 视图添加到具有边界的视图控制器 - 不居中的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将一堆自定义视图从 XIB 添加到 UIStackView

如何将视图 XIB 作为子视图加载到视图控制器 XIB 中

将两个 xib 文件中的两个 tableviews 添加到主 xib 视图

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

将 UIView 从 xib 添加到 UIScrollView

在带有 XIB 的视图控制器上以编程方式初始化 UISegmentedControl