查看View的层次结构

/**

*  返回传入veiw的所有层级结构

*

*  @param view 需要获取层级结构的view

*

*  @return 字符串

*/

- (NSString *)digView:(UIView *)view

{

if ([view isKindOfClass:[UITableViewCell class]]) return @"";

// 1.初始化

NSMutableString *xml = [NSMutableString string];

// 2.标签开头

[xml appendFormat:@"<%@ frame=\"%@\"", view.class, NSStringFromCGRect(view.frame)];

if (!CGPointEqualToPoint(view.bounds.origin, CGPointZero)) {

[xml appendFormat:@" bounds=\"%@\"", NSStringFromCGRect(view.bounds)];

}

if ([view isKindOfClass:[UIScrollView class]]) {

UIScrollView *scroll = (UIScrollView *)view;

if (!UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, scroll.contentInset)) {

[xml appendFormat:@" contentInset=\"%@\"", NSStringFromUIEdgeInsets(scroll.contentInset)];

}

}

// 3.判断是否要结束

if (view.subviews.count == 0) {

[xml appendString:@" />"];

return xml;

} else {

[xml appendString:@">"];

}

// 4.遍历所有的子控件

for (UIView *child in view.subviews) {

NSString *childXml = [self digView:child];

[xml appendString:childXml];

}

// 5.标签结尾

[xml appendFormat:@"</%@>", view.class];

return xml;

}

时间: 2024-10-09 16:27:38

查看View的层次结构的相关文章

初级篇第十期:学习查看View的层级关系

学习建议:自己动手,丰衣足食 学习周期:1周 学习目的:熟练使用Debug View Hierarchy查看View的层级关系 学习答疑:欢迎来技术群里提问并做分享 学习工具:Xcode开发环境,iOS8+ 学习内容:熟悉Xcode自带视图管理工具 这个功能很强大,早起只有收费软件Reveal可以来很好的调节iOS上UI界面的问题,那么在iOS8出来以后呢,Xcode6又更新出来一个功能,算是自带工具吧,与Reveal是类似的,不管你用IB还是纯代码,都是可以通过这个工具来查看当前程序运行界面中

Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow 工欲善其事,必先利其器,强烈建议新手同学好好研究下XCode这个工具.比如Build Settings,Build Info Rules,Build Parse, Edit Scheme- 前言:这个Swift调试系列分为四篇 图形化界面调试 LLDB常用命令 LLDB进阶使用 Zombie等其他调试 2015.12月和2016.1月主要更新iO

开启真机的View Server引入HierarchyViewer/By写monkeyrunner自动化测试脚本

其实相关文章网上也有不少了,不过在真机上开启View Server的中文文章好像只有一篇,前段时间按照这篇文章的内容,并结合英文源文去hack我的Nexus S(4.1.2)也走了一点弯路.现在总结一下我的步骤(其实有相当一部分拷贝了这篇,衷心感谢原文作者).并写点在开启View Server之后monkeyrunner的脚本. 先交待一下背景,monkeyrunner作为自动化测试Android系统工具在某些情况下还是比Robotium易用一些,不过monkeryrunner判断测试结果是否正

Android View 触摸事件传递机制

PS:以现在的眼光看以前写的博客感觉写的很烂,或许或一段时间再看现在的博客会有同样的感觉.所以每时每刻都去学习,去发现和理解新的东西. 引言 由于之前写的一篇关于Android事件传递顺序的博客质量太差,可能是理解不到位的原因,故最近又花了许多时间再次去看Android源码,看完之后有了新的理解,所以打算重新整理这篇博客.理解Android触摸事件传递机制有助于日后的开发以及自定义一些手势效果等.注意:这篇博客是基于Android2.0源码来分析的,不管老版本还是新版本的Android,其内部触

Android的View和ViewGroup分析

1. 概念 Android中的View与我们以前理解的"视图"不同.在Android中,View比视图具有更广的含义,它包含了用户交互和显示,更像Windows操作系统中的window. ViewGroup是View的子类,所以它也具有View的特性,但它主要用来充当View的容器,将其中的View视作自己的孩子,对它的子View进行管理,当然它的孩子也可以是ViewGroup类型. ViewGroup(树根)和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,V

View的post方法导致的内存泄漏分析

简述: 写这篇文章的缘由是最近项目中查内存泄漏时,发现最终原因是由于异步线程调用View的的post方法导致的. 为何我会使用异步线程调用View的post方法,是因为项目中需要用到很多复杂的自定义布局,需要提前解析进入内存,防止在主线程解析导致卡顿,具体的实现方法是在Application启动的时候,使用异步线程解析这些布局,等需要使用的时候直接从内存中拿来用. 造成内存泄漏的原因,需要先分析View的post方法执行流程,也就是文章前半部分的内容 文章内容: View#post方法作用以及实

Android View measure (一) 流程分析

本篇模拟三个角色:Android 架构师-小福.Android  控件开发工程师-小黑. Android 开发工程师-小白,下面按照三个角色不同角度分析measure过程. 小福负责分享: measure的本质 - ok measure代码流程 - 分析FrameLayout.onMeasure onMeasure方法与MeasureSpec - ok 提出问题 Android 架构师-小福的分享 一.Measure本质 小福:我今天分享是的measure架构设计相关的,先问一个问题,measu

解析View的getDrawingCache方法

1. View 的getDrawingCache方法 有时候需要将某个view的内容以图片的方式保存下来,感觉就和截图差不多,可以使用View 的getDrawingCache方法,返回一个Bitmap对象. 2. View的getDrawingCache的具体实现 查看View的getDrawingCache()方法 /** * <p>Calling this method is equivalent to calling <code>getDrawingCache(false)

Android中将xml布局文件转换为View树的过程分析(上)

有好几周没写东西了,一方面是因为前几个周末都有些事情,另外也是因为没能找到好的写作方向,或者说有些话题 值得分享.写作,可是自己积累还不够,没办法只好闷头继续研究了.这段时间一边在写代码,一边也在想Android中 究竟是如何将R.layout.xxx_view.xml这样的布局文件加载到Android系统的view层次结构中的(即我们常说的view树). 这期间一方面自己研究了下源码,另一方面也在网上搜索了下相关文章,发现了2篇很不错的同主题文章,推荐给大家: http://blog.csdn