首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autolayout对比误差

Autolayout对比误差
EN

Stack Overflow用户
提问于 2014-07-31 04:09:30
回答 1查看 398关注 0票数 1

所以这个自动输出错误。我知道它为什么在那里,但我不知道我怎么能修好它。与错误一样,它显然无法解决这些约束。在纵向模式下,所有47集都被列出,可以滚动到。但在景观模式下,这是不可能的,这是明确的,因为高度的桌子是没有改变的方式,它仍然在那里,但不能滚动到它。

所以我就是这么安排的。

其中as视图控制器有两个用作占位符的视图,上面是iAds的,下面是持有表的视图。这个主意是幕后黑手。如果广告没有加载,我将将视图的高度设置为零,这将容纳iADBanner。所以表视图占用了所有的空间。(这是雷·温德利希的应用程序给我提出来的。)我最初是挣扎于自动布局,但我做了正确的,所以当sim进入纵向模式时,这个视图占据了全部宽度。但不知何故,我无法确定持有tableView的视图的高度。下面是约束的屏幕截图。

我尽我所能来描述。但我想要的不仅仅是答案。我想完全了解这一点,这样以后我很可能就不会有问题了。我已经完成了raywenderlich的教程。因此,任何其他指针都将与答案一起受到极大的赞赏。

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-31 05:13:52

错误日志中的约束列表是理解此类问题的关键。您要做的是仔细查看它,以关联哪些行引用代码/ui构建器中的哪些约束,以及哪个十六进制地址引用哪个视图。

  1. V:[UIView:0xa69b830]-(0)-[_UILayoutGuide:0xa5a8410]是一个将UIView底部设置为布局指南的约束,所以这很可能是截图“垂直空间底部布局指南-TableVi.”中的最后一个约束。(大概是TableViewHolder截断了)。这意味着UIView:0xa69b830是你的TableViewHolder
  2. V:|-(50)-[UIView:0xa69b830] (Names: '|':UIView:0xa69b7d0 )是从其superview绑定TableViewHolder 50 be顶部的约束,必须是UIView:0xa69b7d0
  3. UIView:0xa69b7d0.width == 0.682303*UIView:0xa69b830.height看起来像是超级视图宽度和TableViewHolder高度之间的高宽比约束。
  4. h=--& v=--& H:[UIView:0xa69b7d0(480)]h=--& v=--& V:[UIView:0xa69b7d0(271)]是从其autoresizingMask派生的超级视图上的约束,其中width=480px、height=271px以及它们的顶/左/宽/高是固定的(基于h=--& v=--&)。这是一个视图控制器的根视图的标准设置-它的尺寸由视图控制器手动管理以填充屏幕。

因此,一旦有了所有这些,您就可以看到问题所在: superview有固定的维度480x271。同时,TableViewHolder的高度是由多个相互冲突的约束决定的:

  • #1和#2正试图将其垂直拉伸,以填充其superview在顶部的50 it边距,因此高度= 271-50 =221 it。
  • #3试图将高度设置为superview宽度的比率:高度= 480/0.6823 = 703.5px
  • 221 != 730.5!

有些东西是必须给予的,而操作系统恰好选择#1,所以TableViewHolder的底部延伸到布局指南的底部,使得它突出在屏幕的边缘,无法访问。

您的解决方案可能涉及消除高宽比约束,但一旦修复,可能还会出现其他问题。祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25050720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档