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;}