当前位置: 首页 > news >正文

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

前几天写了一个关于调试歧义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];
复制代码

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

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

相关文章:

  • CSU-ACM2018寒假集训选拔-入门题
  • 云数据库 Redis 版功能特性
  • bootstrap和elementUI真的会冲突
  • LeetCode:26. Remove Duplicates from Sorted Array(Easy)
  • jvm 内存分配
  • 从Storm和Spark 学习流式实时分布式计算的设计
  • Nginx + Tomcat + HTTPS 配置原来不需要在 Tomcat 上启用 SSL 支持
  • 应用多级缓存模式支撑海量读服务
  • iOS 兼容多个有crash 收集机制的SDK
  • 37.3. HQL
  • 详细解析漏洞4个boom
  • HSRP、VRRP、ACL
  • 407. 加一
  • NoClassDefFoundError
  • 压缩打包介绍 gzip压缩工具 bzip2压缩工具
  • 【刷算法】求1+2+3+...+n
  • Angular Elements 及其运作原理
  • Angularjs之国际化
  • co.js - 让异步代码同步化
  • ComponentOne 2017 V2版本正式发布
  • Create React App 使用
  • iOS编译提示和导航提示
  • Java Agent 学习笔记
  • JavaScript类型识别
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Terraform入门 - 1. 安装Terraform
  • Vue小说阅读器(仿追书神器)
  • Vue学习第二天
  • 关于for循环的简单归纳
  • 聊聊hikari连接池的leakDetectionThreshold
  • 说说动画卡顿的解决方案
  • 突破自己的技术思维
  • 微服务框架lagom
  • 正则表达式-基础知识Review
  • 昨天1024程序员节,我故意写了个死循环~
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • ( 10 )MySQL中的外键
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (二)WCF的Binding模型
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (四)Linux Shell编程——输入输出重定向
  • (循环依赖问题)学习spring的第九天
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET6 命令行启动及发布单个Exe文件
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /etc/sudoer文件配置简析
  • @SuppressWarnings注解
  • @软考考生,这份软考高分攻略你须知道
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [20150321]索引空块的问题.txt