为autoLayout 增加标识符,方便调试

如上图,是一个十分简单的布局。
root view 上加了一个 button 和一个 webview。
不加标识符的样子
视图层级中没有标识

只有 UIView、WKWebView 之类,如果view很多,就很难分得清。约束没有标识符
只知道 uiview 和uibutton 中心对齐,不知道哪个view 和哪个 button。
autoLayout 日志中没有标识符
(lldb) po [0x7f8aaa50e6d0 _autolayoutTrace] •UIWindow:0x7f8aaa60a1b0
| •UIView:0x7f8aaa502c30
| | *_UILayoutGuide:0x7f8aaa50d140
| | *_UILayoutGuide:0x7f8aaa50d750
| | *UIButton:0x7f8aaa50e6d0'click to send'
| | | UIButtonLabel:0x7f8aaa6073b0'click to send'
| | *WKWebView:0x7f8aaa851000
| | | WKScrollView:0x7f8aaa853a00
| | | | WKContentView:0x7f8aaa83c400
| | | | | UIView:0x7f8aaa706350
| | | | | | UIView:0x7f8aaa7002e0
| | | | | | | WKCompositingView:0x7f8aaa712200
| | | | | | | | WKCompositingView:0x7f8aaa60ec10
| | | | | | | | | WKCompositingView:0x7f8aaa60edf0
| | | | | | | | | | WKCompositingView:0x7f8aaa60f1b0
| | | | | | | | | | | WKCompositingView:0x7f8aaa60efd0
| | | | | | | | | | WKCompositingView:0x7f8aaa60e850
| | | | | | | | | WKCompositingView:0x7f8aaa60e670
| | | | | | | | WKCompositingView:0x7f8aaa60ea30
| | | | UIView:0x7f8aaa7066b0
| | | | UIImageView:0x7f8aaa70ce00
| | | | UIImageView:0x7f8aaa70cbd0 Legend:
* - is laid out with auto layout
+ - is laid out manually, but is represented in the layout engine because translatesAutoresizingMaskIntoConstraints = YES
• - layout engine host (lldb) po [0x7f8aaa50e6d0 constraintsAffectingLayoutForAxis:0]
<__NSArrayI 0x600000f3aa30>(
<NSContentSizeLayoutConstraint:0x6000025ac2a0 UIButton:0x7f8aaa50e6d0'click to send'.width == 102 Hug:250 CompressionResistance:750 (active)>,
<SnapKit.LayoutConstraint:0x6000025a7420@ViewController.swift#26 UIButton:0x7f8aaa50e6d0.centerX == UIView:0x7f8aaa502c30.centerX>,
<NSLayoutConstraint:0x600002289270 'UIView-Encapsulated-Layout-Width' UIView:0x7f8aaa502c30.width == 375 (active)>
)
为约束增加标识符
button.snp.makeConstraints { (make) in
make.centerX.equalToSuperview().labeled("mybutton centerX")
make.top.equalToSuperview().offset(50).labeled("mybutton top")
}
webView.snp.makeConstraints({ (make) in
make.leading.trailing.bottom.equalToSuperview().labeled("mywebview Edges")
make.top.equalToSuperview().offset(200).labeled("mywebview Top")
})
效果
视图层级中,可以看到约束的标识符了。

选中约束之后,可以看到 Identifier了

layout日志中,可以看到标识符了

为 view 设置 accessibilityIdentifier 属性
view.accessibilityIdentifier = "rootView abi"
button.accessibilityIdentifier = "mybtn abi"
webView.accessibilityIdentifier = "mywebview abi"
效果
layout 日志中可以看到


但是 snapKit 约束的描述,设置的accessibilityIdentifier 没有作用。
增加 accessibilityLabel

在视图层级中,可以看到
总结
- 设置约束的标识符,无论是 SnapKit,还是系统原生的
- 设置
accessibilityIdentifier属性,在日志中可以帮助定位问题 - 设置
accessibilityLabel属性,帮助查看视图成绩
为autoLayout 增加标识符,方便调试的更多相关文章
- 珍惜每一滴水(kbmmw 中的内存调试)
作为一个服务器端的应用,最基本的要求就是稳定,当然要做一个稳定的服务器端,需要涉及到很多方面, 内存泄露就是稳定的一个致命杀手,因为服务器的物理内存是有限的,即使一个功能有很小的内存泄露,经过 长时间 ...
- Android studio动态调试smali
前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会. 0x01 ...
- PHP使用Xdebug进行远程调试
PHP使用Xdebug进行远程调试 翻译 by mylxsw posted on 2014/07/14 under 技术文章 > 编程语言 Xdebug提供了客户端与PHP脚本进行交互的接口,这 ...
- 使用pycharm远程调试python代码
使用 pycharm 进行 python 代码远程调试 pycharm 的远程调试是从远程机器连接到本地机器,需要在远程机器的py文件中指定本地机器的IP和端口. 远程机器上,通过easy_insta ...
- Linux内核调试方法总结【转】
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...
- 用GDB调试多进程程序
在子进程中sleep.然后attach上去. gdb --pid=123456 ps出子进程的id,gdb attach 进程号. http://www.ibm.com/developerworks/ ...
- 【转】Linux内核调试方法总结
目录[-] 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_sta ...
- Perl的调试方法
来源: http://my.oschina.net/alphajay/blog/52172 http://www.cnblogs.com/baiyanhuang/archive/2009/11/09/ ...
- Thinkphp开启调试模式
3.0版本的调试模式开启,必须在项目入口文件中添加常量APP_DEBUG定义,如下: define('APP_DEBUG',True); // 开启调试模式 开启调试模式后,你可能感觉不到什么变化,不 ...
随机推荐
- jQuery nyroModal 插件遇到问题
nyroModal ver 1.6.2 弹出层插件 浏览更多 初始化大小问题 //页面加载完成后初始化 设置大小 $(function() { $.nyroModalSettings({ widt ...
- 构造函数constructor 与析构函数destructor(五)
我们知道当调用默认拷贝构造函数时,一个对象对另一个对象初始化时,这时的赋值时逐成员赋值.这就是浅拷贝,当成员变量有指针时,浅拷贝就会在析构函数那里出现问题.例如下面的例子: //test.h #ifn ...
- const变量指针赋值给非const类型的指针运行结果
在c++可以定义一个const变量,然后把变量的值赋给一个非const指针,可以通过指针来改变const变量的值吗?下面的截图给出了答案
- Devexpress VCL Build v2014 vol 14.2.1 beta发布
已经快到2015 年了. 14.2.1 beta 才出来了. 还好,有一些新东西. 官网地址 VCL Gauge Control Designed to clearly convey informat ...
- 2018.10.02 NOIP模拟 矩阵分组(二分答案)
传送门 考场上并不会写二分的check函数,下来看了看题解发现真是妙极. 不难想到每次直接从四个角各按阶梯状拓展出合法区域A,再检验B是否合法就行了.(然而考场上写的弃疗了) 于是题解用了一些小技巧优 ...
- HDU 1716 排列2 (格式问题+排列)
题意:. 析:我们完全可以STL里面的函数next_permutation(),然后方便,又简单,这个题坑就是在格式上. 行末不能有空格,结尾不能有空行,不大好控制,必须控制好第一次数. 这个题本应该 ...
- 关于linux下/srv、/var和/tmp的职责区分
转载自:https://blog.csdn.net/u012107143/article/details/54972544?utm_source=itdadao&utm_medium=refe ...
- Spring3.x错误----NotFoundException: org.objectweb.asm.codevisitor
Spring3.x错误: 解决办法: 一定要引入cglib-nodep-2.1_3.jar,而不是cglib-2.1.3.jar
- Word图片上传控件(WordPaster)更新-2.0.15版本
更新说明: 1. 增加对webp图片的支持,支持微信公众号图片的下载. 效果参考:http://www.ncmem.com/doc/view.aspx?id=9761f8ce4fe04d0ab0f ...
- Md5 util
Md5PasswordEncoder.java http://docs.spring.io/spring-security/site/docs/3.0.x/apidocs/org/springfram ...