如上图,是一个十分简单的布局。
root view 上加了一个 button 和一个 webview。

不加标识符的样子

  1. 视图层级中没有标识

    只有 UIView、WKWebView 之类,如果view很多,就很难分得清。

  2. 约束没有标识符

    只知道 uiview 和uibutton 中心对齐,不知道哪个view 和哪个 button。

  3. 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 增加标识符,方便调试的更多相关文章

  1. 珍惜每一滴水(kbmmw 中的内存调试)

    作为一个服务器端的应用,最基本的要求就是稳定,当然要做一个稳定的服务器端,需要涉及到很多方面, 内存泄露就是稳定的一个致命杀手,因为服务器的物理内存是有限的,即使一个功能有很小的内存泄露,经过 长时间 ...

  2. Android studio动态调试smali

    前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会.   0x01 ...

  3. PHP使用Xdebug进行远程调试

    PHP使用Xdebug进行远程调试 翻译 by mylxsw posted on 2014/07/14 under 技术文章 > 编程语言 Xdebug提供了客户端与PHP脚本进行交互的接口,这 ...

  4. 使用pycharm远程调试python代码

    使用 pycharm 进行 python 代码远程调试 pycharm 的远程调试是从远程机器连接到本地机器,需要在远程机器的py文件中指定本地机器的IP和端口. 远程机器上,通过easy_insta ...

  5. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  6. 用GDB调试多进程程序

    在子进程中sleep.然后attach上去. gdb --pid=123456 ps出子进程的id,gdb attach 进程号. http://www.ibm.com/developerworks/ ...

  7. 【转】Linux内核调试方法总结

    目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_sta ...

  8. Perl的调试方法

    来源: http://my.oschina.net/alphajay/blog/52172 http://www.cnblogs.com/baiyanhuang/archive/2009/11/09/ ...

  9. Thinkphp开启调试模式

    3.0版本的调试模式开启,必须在项目入口文件中添加常量APP_DEBUG定义,如下: define('APP_DEBUG',True); // 开启调试模式 开启调试模式后,你可能感觉不到什么变化,不 ...

随机推荐

  1. webapp的优化总结

    1. 最先加载本地数据,下拉刷新再取最新数据. 2. 图片延后加载.一种方法先<div data-url="xx.png"></div>,先加载一个div, ...

  2. 2018.08.30 bzoj4318: OSU!(期望dp)

    传送门 简单期望dp. 感觉跟Easy差不多,就是把平方差量进阶成了立方差量,原本维护的是(x+1)2−x2" role="presentation" style=&qu ...

  3. 2018.07.07 洛谷 P3939 数颜色(主席树)

    P3939 数颜色 题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不 ...

  4. C++之类和对象的使用(一)

    对象的初始化 在声明类时直接对数据成员初始化是错误的!下面的例子时错误的!! class Time{ hour =; minitu=; sec=; } //因为类并不是一个实体,而是一种抽象类型,并不 ...

  5. py-opp 类(class)

    类的创建 class 类名: pass class Bar: def foo(self,arg): # self ,是传的实例对象, print('self:',self,arg) #因为类属性和方法 ...

  6. Redis java client ==> Jedis

    https://github.com/xetorthio/jedis Jedis is a blazingly small and sane Redis java client. Jedis was ...

  7. nodejs中使用mongodb quickstart

    nodejs中使用mongodb quickstart node 中使用mongodb的quick start.整理的官网crud简单例子. 在百度找了几篇帖子都有问题,所以直接看官网了. 连接Mon ...

  8. 20170908工作日记--Volley源码详解

    Volley没有jar包,需要从官网上下载源码自己编译出来,或者做成相关moudle引入项目中.我们先从最简单的使用方法入手进行分析: //创建一个网络请求队列 RequestQueue reques ...

  9. x11vnc配置--ubuntu14.04

    x11vnc是连接到真实的X会话,相比vnc4server和tightvncserver自己创建不同分辨率的xserver来说,画面延时和显示效果应该要好一些.两种服务都试过,个人感觉x11vnc要好 ...

  10. Python + Robotframework + Appium 之APP自动化测试实践(一)

    前面的文章已经介绍了Robotframework+Appium的安装及小试牛刀(For Android) 下面来个简单的实践,话不多说,还以是计算器为例,直接上代码,详情如下: *** Setting ...