带有约束的 iOS 6.0 AutoLayout 问题:旋转时子视图消失

Posted

技术标签:

【中文标题】带有约束的 iOS 6.0 AutoLayout 问题:旋转时子视图消失【英文标题】:iOS 6.0 AutoLayout issue with constraints: subviews disappear when rotated 【发布时间】:2013-02-20 20:26:15 【问题描述】:

您好我已经设计了一个使用 AutoLayout 约束的 XIB 来显示两行按钮,每行三个按钮,如屏幕截图所示(我将在获得满意的布局后将按钮放置在红色 UIViews 中):

到目前为止一切都很好,在纵向模式下,如上图所示,按钮看起来不错。但是,当我旋转到横向时,标题(蓝色)和父视图(灰色)会调整大小并正确显示,但红色按钮视图会消失(见下文)。

设置约束以使其正常工作的最佳方法是什么?我遵循了 Ray Wenderlich 教程并使用了他在示例中使用的相同的 Editor\Pin]Vertical Spacing 和 Editor\Pin\Horizo​​ntal 间距: Ray Wenderlich tutorial

我也遇到很多约束错误,如下:

        Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x859abe0 UIView:0x85a8fb0.height == UIView:0x85a8e60.height>",
    "<NSLayoutConstraint:0x859ab60 V:[UIView:0x85a8fb0]-(114)-|   (Names: '|':UIView:0x85a8170 )>",
    "<NSLayoutConstraint:0x859ab20 V:|-(424)-[UIView:0x85a8fb0]   (Names: '|':UIView:0x85a8170 )>",
    "<NSLayoutConstraint:0x85a3430 V:|-(150)-[UIView:0x85a8170]   (Names: '|':UIView:0x85a8da0 )>",
    "<NSLayoutConstraint:0x85a33b0 V:[UIView:0x85a8170]-(NSSpace(20))-|   (Names: '|':UIView:0x85a8da0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x75ac610 h=--& v=--& V:[UIView:0x85a8da0(704)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x859ab60 V:[UIView:0x85a8fb0]-(114)-|   (Names: '|':UIView:0x85a8170 )>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

我对此束手无策,因此非常感谢这个博学团体的任何帮助......!

【问题讨论】:

我有类似的问题,但完全没有日志。唯一提到坠机的是在组织者中。如何在日志中也启用它们? 我当然是以编程方式处理了这个问题。 【参考方案1】:

该错误意味着您有冲突的约束。尝试让它工作一排。

    将每个带有垂直间距的红色框固定到蓝色标题框 用前导空格固定左侧红色框以进行超级视图 用尾随空格固定右侧红色框以进行超级视图 设置中心红框左右水平间距 固定高度 选择所有三个红色框并将它们设置为具有相等的宽度(宽度相等) 删除 IB 添加的任何无关约束 在设备上测试。 (我有模拟风景/肖像)在界面构建器中有时会改变约束。 9 它应该看起来像所附的图像

【讨论】:

非常感谢您抽出宝贵的时间做出回应,并为您精心布置了答案。我会试试这个,看看它是否能解决问题......

以上是关于带有约束的 iOS 6.0 AutoLayout 问题:旋转时子视图消失的主要内容,如果未能解决你的问题,请参考以下文章

iOS:UIView 的 Autolayout 拉伸高度过多(Xcode 8、Swift 3)

IOS 6.0+ Autolayout — UITableViewCell 高度调整

iOS - AutoLayout'无法同时满足约束'

iOS 8 xib + AutoLayout 无法为 tableViewHeaderView 正常工作

iOS 在xib或者storyboard中添加AutoLayout后,在代码中修改AutoLayout约束条件

iOS - XIB之AutoLayout添加约束