你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS-獲取UIView的所有層級結構

iOS-獲取UIView的所有層級結構

編輯:IOS開發綜合

在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;
}
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved