今天在看之前别人写的autolayout,实在是忍受不了console弹出的一大堆的autolayout警告,于是就开始折腾了。
入正题,对于
Unable to simultaneously satisfy constraints.
这类的警告就是控件之间的constraints有冲突了,首先上面截图的警告的意思就是
小括号里面的constraints(如上图-“影响constraints“ )与被影响的constraints(如下图-”被影响的constraints“)有冲突
我们可以通过修改 ”影响constraints“ 中的constraints来避免冲突。
解决步骤:
1.在xcode里面增加一个breakpoint来寻找报错的constraints所涉及的控件。 参考:http://staxmanade.com/2015/06/debugging-ios-autolayout-issues/
2.当你找到”被影响的constraints“里面的控件所在的树。
po [[0x7f83d0587450 superview] recursiveDescription]
找到 0x7f83d0587450 这个地址所指的控件。(在HomeFunctionView 的类里面有警告)
V:[UIView:0x7f83d0587450]-(1)-[UIView:0x7f83d2903b40]
这个constraints的意思是,在垂直的方向上[UIView:0x7f83d0587450] 与[UIView:0x7f83d2903b40]中间间隔为1;
同理:尚未所指的”影响constraints“
V:|-(0)-[UIView:0x7f83d0587450]
//在垂直的方向上 [UIView:0x7f83d0587450] 与 父view 等高;
UIView:0x7f83d0587450.height == 0.477419*HomeFunctionView:0x7f83d053a1a0.height
//UIView:0x7f83d0587450的高度 等于父view的0.477419
UIView:0x7f83d2903b40.bottom == HomeFunctionView:0x7f83d053a1a0.bottom
//UIView:0x7f83d2903b40的底边和父view的底边相等
UIView:0x7f83d2903b40.height == 0.516129*HomeFunctionView:0x7f83d053a1a0.height
//UIView:0x7f83d2903b40的高度等于父view的0.516
V:[UIView:0x7f83d0587450]-(1)-[UIView:0x7f83d2903b40]>
//在垂直的方向上[UIView:0x7f83d0587450] 与[UIView:0x7f83d2903b40]中间间隔为1;
V:[HomeFunctionView:0x7f83d053a1a0(200.581)]
//父view 的高度是200.581
经过自己重新查看constraints 发现
UIView:0x7f83d2903b40.bottom == HomeFunctionView:0x7f83d053a1a0.bottom //UIView:0x7f83d2903b40的底边和父view的底边相等
UIView:0x7f83d2903b40.height == 0.516129*HomeFunctionView:0x7f83d053a1a0.height //UIView:0x7f83d2903b40的高度等于父view的0.516
这两个constraints导致报警告。
删除下面这个constraints 就可以了。
UIView:0x7f83d2903b40.bottom == HomeFunctionView:0x7f83d053a1a0.bottom //UIView:0x7f83d2903b40的底边和父view的底边相等