iOS-获取UIView的所有层级结构

在iOS中获取UIView的所有层级结构

应用场景

在实际 iOS 开发中,很多时候都需要知道某个 UI 控件中包含哪些子控件,并且分清楚它们的层级结构和自个的 frame 以及 bounds ,以便我们完成复杂的 UI 布局,下面的代码就能很方便的获取某个 UI 控件的所有的层级结构,我们可以用它计算,然后把结果写入到本地磁盘,导出成XML文件,这样我们就可以很直观的看出它内部的细节。

/**
 * 返回传入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-12 23:20:34

iOS-获取UIView的所有层级结构的相关文章

在iOS中获取UIView的所有层级结构 相关

在iOS中获取UIView的所有层级结构 应用场景 在实际 iOS 开发中,很多时候都需要知道某个 UI 控件中包含哪些子控件,并且分清楚它们的层级结构和自个的 frame 以及 bounds ,以便我们完成复杂的 UI 布局,下面的代码就能很方便的获取某个 UI 控件的所有的层级结构,我们可以用它计算,然后把结果写入到本地磁盘,导出成XML文件,这样我们就可以很直观的看出它内部的细节. /** * 返回传入veiw的所有层级结构 * * @param view 需要获取层级结构的view *

iOS 获取UIView所在的VIewController

写程序的时候我们经常要封装代码,当你封装了一个UIView的子类里需要调用所在ViewController的方法用如下代码调取所在的VIewController #pragma mark - 获取所在ViewController - (UIViewController *)superViewController:(id)sender { for (UIView* next = [self superview]; next; next = next.superview) { UIResponder

iOS 获取UIView 动画的实时位置的方法

[self.animationView.layer.presentationLayer frame].origin.x

iOS的系统层级结构和相关的框架

一,概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch layer).理解iOS的系统构架,对我们日常开发有很大帮助.其实iOS是基于UNIX的,所以我们完全可以相信这个操作系统,要知道从系统的稳定性上来说它要比其他操作系统的产品好很多. 二, IOS操作系统的层次结构及相关框架 1.Core OS 核心层:包含Accelerate Framew

使用Accessibility Inspector来检测IOS APP中控件元素的层级结构

Accessibility Inspector是xcode中自带的一个检测工具, 可以非常方便快速地获取IOS APP中各个控件元素的层级结构. 利用该层级结构, 我们可以在UIAutomation中实现相应的自动化了. 在Xcode->Open Developer Tool->Accessibility Inspector打开该工具, 该工具需要在Mac的安全性与隐私里边设置辅助功能的权限, 即允许该工具控制电脑. 打开后,会发现该检测工具会一直悬浮在屏幕的最前端, 且能够检测到电脑屏幕上的

iOS中UITabelView的层级结构

在iOS7以前,iOS中UITabelView的层级结构 IOS6:(your view)-> UITableViewContentView-> UITableViewCell-> UITableView 在iOS7以后,iOS中UITabelView的层级结构 IOS7:(your view)-> UITableViewCellContentView-> UITableViewCellScrollView-> UITableViewCell-> UITableV

iOS 在控制台console lldb 输出某个view 的层级结构

在控制台 LLDB   环境中 po  [self.view recursiveDescription] 就可以输出 该 view的层级结构 <UILayoutContainerView: 0x7ffc8a5dae30; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x7ffc90f07270>; layer = <CALayer: 0x7ffc90f15e10>> |

ios 获取当前view的controller

 //获取view的controller  - (UIViewController *)viewController {     for (UIView* next = [self superview]; next; next = next.superview) {         UIResponder *nextResponder = [next nextResponder];          if ([nextResponder isKindOfClass:[UIViewControll

IOS开发 UIView控件

1.万物皆对象 2.LBS:基于位置的服务(热门) 3.在启动XCODE创建项目的时候最好勾选 git 4.在SB界面中更改UILabel 之类的控件里面的内容,控件的frame会随着内容的大小而改变,但是在右侧的属性栏里面更改则不会影响frame 5.IBAction:SB界面原来叫Interface Builder 缩写为IB, 6.M_PI_4  代表45°  以此类推 // OC语法规定:不允许直接修改 某个对象中结构体属性的成员 ? 1 2 3 4 5 6 7 8 // 1.先取出fr