UIAppearanceContainer 利器

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

/**
自定義一個類的所有實例的外觀,外觀修改相關信息發送到外觀的代理類。注意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可以很方便,很簡單。而且用系統的實現方式心里也有底,性能也比自定義實現的好多了。

優點3:代碼易管理,易迭代,在設計風格出現變動的時候可以快速的響應

因為你對整個app風格可以在一處地方可以實現,想要改動的時候自然輕松的多。如TableView的背景色設置,cell的按下狀態顏色設置等等

    [[UITableView appearance] setBackgroundColor:[UIColor whiteColor]];
    UIView *cellSelectedBgView = [UIView new];
    cellSelectedBgView.backgroundColor = [UIColor yellowColor];
    [[UITableViewCell appearance] setSelectedBackgroundView:cellSelectedBgView];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,241評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,333評論 25 708
  • 清晨的鬧鐘準時在六點四十五分響起,我從昨夜的睡夢中驚醒,匆忙地關掉鬧鐘。照例要多睡個十幾分鐘的,讓自己一點一點從慵...
    九月星辰閱讀 161評論 1 1
  • 1 我一個朋友清清自幼長得很是漂亮。 但有一天她男朋友說要跟她分手。 原因竟然是:太胖。 天吶,清清才102斤! ...
    Danae手寫你心閱讀 174評論 0 1
  • 網絡賺錢有兩種方法,一種是賣實物產品,一種是虛擬產品。 要想賺錢,就得暴利。在互聯網有哪些暴利產品? 大家留言。
    時海SH閱讀 147評論 0 0