前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用约束优先级解决Autolayout冲突

利用约束优先级解决Autolayout冲突

作者头像
用户6094182
发布2019-08-23 18:03:33
1.6K0
发布2019-08-23 18:03:33
举报
文章被收录于专栏:joealzhou
利用约束优先级解决Autolayout冲突
问题发生

当你在运行程序的时候,发现Xcode的终端打印了一些控件的布局冲突信息时,类似于如下:

代码语言:javascript
复制
2018-06-26 15:13:08.067547 xxxx[302:38207] [LayoutConstraints] 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. 
    
    ...
    
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

这就说明你当前的自动布局存在一些问题。

问题解决

当遇到布局问题时,我们可以在Xcode中断点调试栏添加一个Symbolic Breakpoint symbol:UIViewAlertForUnsatisfiableConstraints

断点调试

断点信息填写

如上添加完成后重新运行程序到打印布局错误log的地方,断点将会发生作用,然后按照以下步骤运行,终端会给出有问题的布局约束,接下来我们修改此约束的优先级就可以了。

image

log

我上面的布局错误提示是:nameBtn水平布局约束有问题。注意看前面的H是水平布局,V是垂直布局。我使用的是purelayout布局框架,只要block里面是nameBtn的水平约束就行。

代码语言:javascript
复制
NSLayoutConstraint.autoSetPriority(900) {
        [weak self] in
        self?.nameBtn.autoPinEdge(toSuperviewEdge: .trailing, withInset: 15)
    }

至此我的问题已解决,终端不再打印约束错误。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.06.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 利用约束优先级解决Autolayout冲突
    • 问题发生
      • 问题解决
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档