前几天写了一个关于调试歧义LAYOUT的办法,最近又发现了一个可能更好一点的其他办法,当确定在某个控制器(viewController)内部的约束布局有歧义时,可以用如下的方法调试。
1.在控制器的@implementation 部分上面加上下面的代码

@interface UIWindow (AutoLayoutDebug) + (UIWindow *)keyWindow;
- (NSString *)_autolayoutTrace;
@end

2.在 @implementation 部分内部增加下面的方法

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]); }
- (void)didRotateFromInterfaceOrientation: (UIInterfaceOrientation)fromInterfaceOrientation
{
[super didRotateFromInterfaceOrientation:
fromInterfaceOrientation];
NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]); }

程序运行时,如果切换到当前页面则会出现下面的打印

*<UIWindow:0x8a56ff0>
| *<UIView:0x7516d90>
| |
| |
| |
| |
*<UIRoundedRectButton:0x8a57e50> - AMBIGUOUS LAYOUT | <UIGroupTableViewCellBackground:0x8a58810>
| <UIImageView:0x7517070>
| <UIButtonLabel:0x7517e00>

其中<UIRoundedRectButton:0x8a57e50> - AMBIGUOUS LAYOUT就是存在约束歧义的控件

发生歧义约束时,就是系统的自动布局控制(当且这么叫?)不知道应该按照哪种方式来对你的控件进行布局,下面的这个大招将告诉你出现歧义的情况

3.给出现问题的button添加如下方法(自己应该能知道哪个控件的约束是有问题的吧)

[button1 addTarget:button1 action:@selector(exerciseAmbiguityInLayout)
forControlEvents:UIControlEventTouchUpInside];

当完成上面的步骤当你运行程序,并且单击按钮时,按钮会根据有歧义的约束进行循环布局,很神奇吧。

这个方法对其他类型的控件的效力请自试。这个方法只能在调试的时候使用,如果发布版本,一定要去掉这些代码。
希望我的文章对你有帮助,努力,坚持,与君共勉。

有歧义(AMBIGUOUS LAYOUT)的约束布局调试方法2相关推荐

  1. Android ConstraintLayout 约束布局

    说明 Google I/O 2016 上发布了 ConstraintLayout, 简直是要变革 Android 写界面方式. 于是第二天我立即找到相关文档尝试, 这是官方提供的 Codelab 项目 ...

  2. Android Studio 2.2 预览版 - 全新的 UI 设计器和约束布局

    转自谷歌官方微信公众号"谷歌开发者" [img=http://img.bbs.csdn.net/upload/201605/30/1464590559_880118.png][/i ...

  3. 【约束布局】ConstraintLayout 约束布局 ( 简介 | 引入依赖 | 基本操作 | 垂直定位约束 | 角度定位约束 | 基线约束 )

    文章目录 一. ConstraintLayout 简介 1. 引入 约束 布局 ( 1 ) 约束性布局 作用 和 简介 2. 约束 简介 ( 1 ) 约束个数要求 ( 2 ) 约束设置 与 显示位置 ...

  4. Android ConstraintLayout约束布局的理解与使用

    一.什么是约束布局(ConstraintLayout) ConstraintLayout 是一个使用"相对定位"灵活地确定微件的位置和大小的一个布局,在 2016 年 Google ...

  5. android 分区layout以及虚拟内存布局-小结

    摘要 简述启动过程的内存分配,各个映像的烧写,加载,logo的刷新,文件系统mount. DRAM:外部RAM: ISRAM:内部RAM(128K),(PL会跑在ISRAM里面,去初始化DRAM,lo ...

  6. 固定布局(fixed layout)、流体布局(fluid layout)、弹性布局(elastic layout)、响应布局(responsive layout)理解和技巧归纳

    关于web页面布局,首先简单了解一下固定布局(fixed layout).流体布局(fluid layout).弹性布局(elastic layout).响应布局(responsive layout) ...

  7. android横向多布局约束,Android约束布局中心水平对齐Textview和Imageview不工作

    参见英文答案 > Constraint Layout Vertical Align Center                                    6个 我希望我的textv ...

  8. android布局参照示例_约束布局Android示例–第2部分

    android布局参照示例 This is the second tutorial in the series of posts on Constraint Layout android exampl ...

  9. android 约束 布局_Android约束布局动画

    android 约束 布局 In this tutorial, we'll be implementing Constraint Layout Animations in our Android Ap ...

最新文章

  1. 多线程编程 - GCD
  2. 多态时:成员特点,成员变量
  3. NUC1003 Hangover
  4. javascript刷新页面的集中办法
  5. 的注册表怎么才能删干净_洗鞋怎么清洗才能清洗干净?洗鞋店洗鞋怎么清洗的这么干净? 篇幅一...
  6. Android一个ListView列表之中插入两种不同的数据
  7. 在类别无法直接使用的一些对象或方法
  8. Linux服务器数据备份
  9. Window10彻底卸载应用商店
  10. php调用视频功能,phpcms如何调用视频?
  11. SQL注入学习part05:(结合sqli-libs学习:41-50关)
  12. 考试全程指导读书笔记1 -Chap1 信息系统基础
  13. 5G学习-3GPP协议入门
  14. 2014.12 总结
  15. Mysql引擎·索引·事务·锁机制·优化推荐
  16. 斐讯c 语言面试题,斐讯面试记录—三线程交替打印ABC
  17. 解决richedit的内容不能超过64k的方法
  18. 【UE4笔记】蓝图联机游戏制作
  19. Win11还原Win10开始菜单及任务栏工具[Win7勿入]
  20. ng6的ng-template的一个用法

热门文章

  1. 在vc2008中用_crtBreakAlloc调试内存泄漏
  2. Android开发图标尺寸详解
  3. 解决 java poi 导出Excel 无法打开问题
  4. 关于产品的一些思考——阿里巴巴之阿里旺旺
  5. 计算机编码二进制0001,二进制学习01(二进制,进制运算,数据宽度,无符号位有符号位编码规则)...
  6. Hive 的SQL基本操作
  7. 校园招聘Offer、三方协议、两方协议、劳动合同到底都是什么?怎样避免被坑?
  8. C++打开网页,发起QQ对话,调用外部exe程序
  9. 深度学习在语音分离的应用
  10. 1024是什么节日 (中国程序员节)