Interface Builder 布局 UIViewController xib 用于更改顶部栏高度的方向

Posted

技术标签:

【中文标题】Interface Builder 布局 UIViewController xib 用于更改顶部栏高度的方向【英文标题】:Interface Builder layout UIViewController xib for orientation change in top bar height 【发布时间】:2015-01-01 23:02:17 【问题描述】:

我为 UIViewController 子类创建了一个新的 .xib 文件,将所有内容保留为默认值,并在视图顶部附近添加了几个按钮,但允许状态栏 + 导航栏的高度。当我从 UITableViewController rootController 以纵向模式推送它时,一切都很好。但是,当我将 iPhone 旋转到横向时,视图布局不会针对横向模式下较短的顶部栏进行调整,因此按钮和导航栏之间有额外的空间。我知道我可以以编程方式解决这个问题,但必须有一种简单的方法来自动化这个,我设置我的 xib 的方式有问题。有没有办法独立于顶栏高度布置视图?

【问题讨论】:

【参考方案1】:

您可以使用自动布局来解决此问题。

    选择视图上的按钮 在屏幕底部找到图钉图标(右下角,四个图标中的第二个图标)。点击它。 单击指向上方的褪色红线,然后点击添加 1 个约束。 转到图钉图标左侧的下一个图标(称为对齐)。 选择水平居中选项并点击添加 1 个约束。

这将创建一个水平居中的按钮,并且无论设备的方向如何,都将与顶部保持相同的距离。

【讨论】:

感谢您的快速回答,但这并不能解决我的问题。它确实固定了按钮相对于视图顶部的位置。但我希望它相对于导航栏的底部固定,系统会根据方向改变。有没有办法说我的视图顶部应该在导航栏的底部而不是屏幕的顶部? 首先,确保您使用的是尺寸等级。如果没有,请单击 .xib 并打开文件检查器。然后检查尺寸等级选项。然后,您可以拖动导航栏正下方的按钮。按照答案中的相同步骤进行操作。 启用大小类时同样的问题。我有另一个 .xib 只包含一个 UITableView,IB 显示它填充视图,而不是为导航栏留出空间。这确实会自行调整为仅触摸导航栏的底部。我猜 UITableViewController 可能正在以编程方式处理这个……或者我会在 xib 中寻找线索。 在文档大纲中,每个 .xib 中的按钮位置/顺序是否相同?我认为这就是改变事物的原因。 见我上面的回答,问题是由于ios默认设置导航栏/状态栏是半透明的,所以内容应该相对于屏幕顶部而不是导航栏底部定位。当 iOS 7 首次推出时,有很多关于此的帖子……我错误地认为这些只是过渡问题,而 Xcode 现在会默认执行我想要的操作。【参考方案2】:

无法找出 Interface Builder,但能够通过仅以编程方式创建 UIViewController 并设置 self.edgesForExtendedLayout = UIRectEdgeNone; 来解决问题这告诉视图控制器不要扩展导航栏下的视图。可能这也适用于 IB,但 IB 似乎只是一个令人头疼的问题。代码的好处是你可以用谷歌搜索、复制、粘贴和重复使用它。并且有系统的过时和升级程序,不像 GUI 中的功能来来去去都是随意的。

【讨论】:

好点!我将研究如何使用 IB 来做到这一点,因为它可能会派上用场。 顺便说一句,查看此类问题的实用技巧是:self.view.layer.borderWidth = 2; self.view.layer.borderColor = [UIColor redColor].CGColor;然后您可以准确地看到视图尺寸发生了什么。

以上是关于Interface Builder 布局 UIViewController xib 用于更改顶部栏高度的方向的主要内容,如果未能解决你的问题,请参考以下文章

在 Interface Builder 中删除自动布局(约束)

Interface Builder 中的自动布局根据外部视图的宽度/高度更改布局

与在 Interface Builder 中使用自动布局相比,SnapKit 有啥优势?

Interface Builder 自动布局和调整大小

使用 Interface Builder Xcode 6.1.1 的 NSSegmentedControl 布局错误

Xcode Interface builder 中的 Nib 视图不应用自动布局约束