UIAppearanceContainer 利器

這是一個很重要的protocol,並且它的代理類是UIView和UIBarItem等,UIView和UIBarItem是比較偏底層的父類,不少經常使用的UI系控件都繼承了它們中某一個,如UIButton、UILabel、UINavigationBar、UIBarButtonItem。(網上相關資料也很少) 由於這個有個很吸引人的是實例方法app

/**
自定義一個類的全部實例的外觀,外觀修改相關信息發送到外觀的代理類。注意iOS7:UIView iOS7 tintColor屬性已經,如今有特殊遺傳行爲UIView.h中描述。這種繼承的行爲能夠用外表代理衝突,所以tintColor如今不容許出現代理。
**/
+ (instancetype)appearance;

如今來講說使用它的好處了 ####優勢1:能夠少碼不少代碼,節省開發時間,規範代碼。 咱們在建立一個類的時候會寫不少相同的屬性設置代碼。好比一個UILabel的BackgroundColor設置,這個對設計師來講,他們通常都是設計背景色透明的,不一樣的iOS版本它的默認背景色有區別( iOS6默認是白色)的,通常咱們在寫的時候會加上一句代碼 設置背景爲透明。若是有N個控件 那咱們可能要加近N出地方。性能

    [[UILabel appearance] setBackgroundColor:[UIColor clearColor]];

使用這麼一句代碼就能搞定設計

####優勢2:在知足需求時,儘量少的使用自定義控件,性能也會相對好一點 不一樣的app會有不一樣的風格,如UINavigationBar、UITabBar等的樣式變化,UINavigationBar可能網上講的方法比較多,這邊就拿UITabBar來講一下吧。好比最近開發中遇到的一件事 設計看到Instagram app的底部TabBar是隻有顯示圖片,而且高度只有44px,這與咱們正常認知TabBar高度是49px有差別,第一直覺告訴咱們Instagram底部狀態欄是自定義實現的!但常常使用appearance,第二反應我是否能夠經過它來實現。通過實踐用一段簡單的代碼就完成了。代理

[[UITabBar appearance] setFrame:CGRectMake(0, SCREEN_HEIGHT-44, SCREEN_WIDTH, 44)];
//若是圖片的位置須要調整 可以使用下面的代碼 具體位置可經過調值改變
 [[UITabBarItem appearance] setImageInsets:UIEdgeInsetsMake(5, 0, -5, 0)];

看完這個後,是否是以爲換UITabBar能夠很方便,很簡單。並且用系統的實現方式內心也有底,性能也比自定義實現的好多了。code

####優勢3:代碼易管理,易迭代,在設計風格出現變更的時候能夠快速的響應 由於你對整個app風格能夠在一處地方能夠實現,想要改動的時候天然輕鬆的多。如TableView的背景色設置,cell的按下狀態顏色設置等等繼承

    [[UITableView appearance] setBackgroundColor:[UIColor whiteColor]];
    UIView *cellSelectedBgView = [UIView new];
    cellSelectedBgView.backgroundColor = [UIColor yellowColor];
    [[UITableViewCell appearance] setSelectedBackgroundView:cellSelectedBgView];
相關文章
相關標籤/搜索