ios - Xcode IB Storyboard方向和容器 View

标签 ios xcode ipad ios6 interface-builder

在 IOS 6 iPad 应用程序中,我有一个包含多个容器 View 的容器 View Controller 。目前,我已将我的应用程序锁定为横向并且工作正常,但我也想支持纵向。一切都通过界面生成器使用自动布局和约束进行设置。如果可能的话,我想保留一个 Storyboard以保持一致性、可维护性等。

布局是这样的:页眉、左侧菜单、两个内容 Pane (横向并排)和一个底部 Pane ,除了内容之外,我调整了所有 Pane 的大小。当从横向旋转到纵向时,我希望一个内容 Pane 在另一个下方滑动(目前它从屏幕上消失),并且都粘在容器 View 的边缘。

在 HTML5/CSS3 中这很容易做到,但我被困在 IB 中,任何帮助/想法都会很棒!

谢谢!

编辑:

解决方案-

按照@Charles A. 的建议,我将 NSLayoutConstraints 链接到 IBOutlets 并在代码中操纵间距/优先级。我真正挣扎的地方是使用高度和宽度约束。如果您移动了任何东西,Interface Builder 将使用前导/尾随和顶部/底部约束删除或覆盖它们。我终于屈服了,摆脱了所有的高度和宽度限制,只使用前导/尾随/顶部/底部。

我发现了 2 件事:约束有里程碑(例如优先级为 #750),因此如果您务实地将优先级从 749 更改为 750,您将获得:

Mutating a priority from required to not on an installed constraint (or vice-versa) is not supported.

但是,如果您从 750 更改为 800,则没有问题。

此外,在操作约束之后,我需要调用:

[self updateViewConstraints]

我找到了一篇建议 [parent updateViewConstraints] 的帖子,但没有用,上面那个可以!

无论如何,我希望这对这个地方的其他人有所帮助,因为那里没有太多内容。

最佳答案

如果不知道如何设置布局约束来处理两个内容 View ,就很难具体回答这个问题。话虽如此,我可能会通过将我的布局限制为类似于此来处理此 UI(我将使用视觉格式来描述,我假设在这种情况下 super View 是两个内容 View 的父 View ):

|-[contentViewOne]-0-[contentViewTwo(==contentViewOne)]-|

如果 Storyboard中的约束设置如上,您可以创建 NSLayoutConstraint* 类型的 IBOutlet 并将其连接到两个内容 View 之间的水平空间约束(在我上面的例子中,指定常数值为 0 的那个)。当您从横向到纵向设置动画时,只需将它的常量值设置为 contentViewOne 的负宽度。这应该会产生预期的效果。从纵向旋转到横向时,您显然还必须将其设置回 0。

值得注意的是,我假设您的内容 View 宽度相等。如果它们不是,您可能还需要在滑下的那个上制作一个宽度限制的 socket ,以便暂时将其设置为与覆盖它的那个相同的宽度。

有很多潜在的方法可以使用自动布局来处理这种布局。我上面描述的只是其中一种方式。归结为给定您已有的布局才有意义。

关于ios - Xcode IB Storyboard方向和容器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18422065/

相关文章:

ios - 找出用户在 iOS 显示的 UIAlertView 上选择了哪个按钮的方法,请求允许应用程序接收推送通知的权限

ios - 返回 UITableView 的值

ios - 有没有办法在构建之前下载配置文件(使用 Jenkins 或脚本)来构建机器?

Xcode SwiftUI 按钮 - 无法居中

ios - HTML5 iPad应用程序无法在iPad1上运行

ios - 无法使用 XCode 6.0.1 存档构建

ios - iPhone 上的 HTML 音频标签隐藏了一半的高度

json - 在 swift 中解析 A​​PI 对 JSON 的响应

ios - 核心数据,第一次运行时不会在 uitableview 中显示数据,第二次运行正常

iphone - 使用 IB 调整大小构建自定义 UITableViewCell?