所以这个自动布局错误。我知道为什么会有,但我不知道如何解决它。与错误一样明确表示它无法解决约束。 在纵向模式下,所有47集都列出并可以滚动到。但是在横向模式下它是不可能的,这很清楚,因为桌子的高度并没有改变,因为它仍然在那里,但不能滚动到它。
所以这就是我的设置方式。
其中视图控制器有两个视图,它作为占位符,上面是iAds,下面是保持表视图。想法就在这背后。如果未加载广告,我会将View的高度设置为零,以保存iADBanner。因此Table视图占用了所有空间。 (从Ray Wenderlich的应用程序中得到这个想法让我高兴。)我最初在自动布局上苦苦挣扎,但是我做对了,所以当sim进入肖像模式时,视图占据了所有宽度。但不知何故,我无法修复持有tableView的视图高度。 以下是约束的屏幕截图。
我试着尽可能地描述。但我正在寻找的不仅仅是回答。我想完全了解这一点,以便将来很可能不会有问题。我已经完成了raywenderlich教程。所以任何其他指针都会非常欣赏答案。
2014-07-30 21:40:37.326 Test[85608:60b] Unable to simultaneously satisfy constraints. 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:0xa5afbc0 UIView:0xa69b7d0.width == 0.682303*UIView:0xa69b830.height>",
"<NSLayoutConstraint:0xa5afc80 V:|-(50)-[UIView:0xa69b830] (Names: '|':UIView:0xa69b7d0 )>",
"<NSLayoutConstraint:0xa5afdc0 V:[UIView:0xa69b830]-(0)-[_UILayoutGuide:0xa5a8410]>",
"<_UILayoutSupportConstraint:0xa5a7d20 V:[_UILayoutGuide:0xa5a8410(0)]>",
"<_UILayoutSupportConstraint:0xa5af490 _UILayoutGuide:0xa5a8410.bottom == UIView:0xa69b7d0.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0xa792d10 h=--& v=--& H:[UIView:0xa69b7d0(480)]>",
"<NSAutoresizingMaskLayoutConstraint:0xa792dd0 h=--& v=--& V:[UIView:0xa69b7d0(271)]>" )
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xa5afdc0 V:[UIView:0xa69b830]-(0)-[_UILayoutGuide:0xa5a8410]>
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.
答案 0 :(得分:1)
错误日志中的约束列表是理解此类问题的关键。您要做的是仔细查看它以关联哪些行引用代码/ ui构建器中的哪些约束,以及哪个十六进制地址引用哪个视图。
V:[UIView:0xa69b830]-(0)-[_UILayoutGuide:0xa5a8410]
是一个约束,将UIView的底部设置为布局指南,因此很可能是屏幕截图中的最后一个约束“Vertical Space - Bottom layout guide - TableVi ...”(可能是截断的TableViewHolder) )。这意味着UIView:0xa69b830
是您的TableViewHolder
。V:|-(50)-[UIView:0xa69b830] (Names: '|':UIView:0xa69b7d0 )
是将TableViewHolder 50px的 top 与其superview绑定的约束,该视图必须为UIView:0xa69b7d0
。UIView:0xa69b7d0.width == 0.682303*UIView:0xa69b830.height
看起来像是超视图宽度和TableViewHolder高度之间的宽高比约束。h=--& v=--& H:[UIView:0xa69b7d0(480)]
和h=--& v=--& V:[UIView:0xa69b7d0(271)]
是超级视图的约束,它来自 autoresizingMask ,其中width = 480px,height = 271px,以及它们的上/左/宽度/高度是固定的(基于h=--& v=--&
)。这是视图控制器根视图的标准设置 - 它的尺寸由视图控制器手动管理以填充屏幕。所以,一旦掌握了所有这些,您就可以看到问题所在:超视图的固定尺寸为480x271。同时,TableViewHolder的高度由多个冲突约束决定:
有些东西必须给出,操作系统恰好选择#1,因此TableViewHolder的底部延伸到布局指南的底部,使其突出屏幕边缘并且无法访问。
您的修复可能会涉及删除该宽高比限制,但一旦您解决了这个问题,可能会出现其他问题。祝你好运!