淺嘗UIAppearance的使用
相信細心的大家會注意到UIView類中遵守了一個開放的協議UIAppearance,於是作者抽時間做了一些小的嘗試。由於工作使用的是swift語言,因此給出的例項也是用swift寫的。
public protocol UIAppearance : NSObjectProtocol
首先來看看該協議中都有哪些方法。
1.public static func appearance() -> Self
2.public static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
3. public static funcappearanceForTraitCollection(trait: UITraitCollection) -> Self
4.public static func appearanceForTraitCollection(trait: UITraitCollection, whenContainedInInstancesOfClasses containerTypes: [AnyObject.Type]) -> Self
對於第一個方法,就是獲取某一種檢視類的appearance物件,通過該物件可以設定一些對全域性有效的屬性,比如我們平時可能經常設定的tintColor,backgroundColor屬性等。如果我們要修改UINavigationBar的tintColor屬性,我們可以將下列程式碼寫在AppleDelegate裡的didFinishLaunchingWithOptions方法裡。
UINavigationBar.appearance().tintColor = UIColor.yellowColor()
但是這裡有一點需要注意的是使用appearance設定UI效果最好採用全域性的設定,在所有介面初始化前開始設定,否則可能失效。
第二個方法的大體用法是獲取一個檢視類中某種檢視的appearance物件,進而可以設定一些全域性的屬性,一經設定,那麼當前該種檢視上的所有該種子檢視的這一屬性都將被設定。比如要實現新增到UIView上的Button的背景色都設定成黃色,程式碼如下。
UIButton.appearanceWhenContainedInInstancesOfClasses([UIView().dynamicType]).backgroundColor = UIColor.yellowColor()
//這裡需要說明的是,在swift中並沒有像OC當中的那樣通過[object class]獲取到類物件,不過在swift中我們可以通過object.dynamicType獲取物件的類。
對於第三個方法,是iOS8.0後新增的方法,該方法的引數型別是UITraitCollection,返回的仍然是一個appearance物件,對於該種型別的引數,作者也沒有過於深入的研究,這裡只是簡單的的理解。UITraitCollection是iOS8.0新推出的一個類,這個類封裝了像水平和豎直方向的 Size Class 等資訊。該型別的物件是定義在一個名字為UITraitEnvironment的協議中,該協議預設被UIView與UIViewController等遵守.。可以直接通過View或者controller的traitCollection屬性獲取該物件。如果沒有指定某一控制元件的traitCollection屬性,那麼將使用其父控制元件的traitCollection屬性值。
下面是根據第三個方法所做的一個小示例。
UIView.appearanceForTraitCollection(UIView().traitCollection).backgroundColor = UIColor.redColor() //這句程式碼會將所有UIView型別的檢視的背景色設定成紅色,當然這句程式碼也寫在了AppleDelegate裡的didFinishLaunchingWithOptions方法中。
寫到這裡,對於第四個方法,大家只要看一下其方法名,就能猜測出是對方法二和方法三的一個綜合,返回的仍是appearance物件,只不過需要兩種型別的引數,而這兩種型別正是方法二與方法三所需要的引數型別,這裡就不再做測試,如果有興趣,可以親自去嘗試一下。
相關文章
- UIAppearance漫談UIAPP
- Android原生整合Flutter的淺嘗AndroidFlutter
- 淺嘗flutter中的http請求FlutterHTTP
- 淺嘗flutter中的flex佈局FlutterFlex
- 淺嘗正規表示式
- 淺嘗輒止,React是如何工作的React
- 淺嘗Vue.js元件(二)Vue.js元件
- Ruby 札記 - 淺嘗 Ruby 特性
- 淺嘗Node檔案系統
- svg 線條動畫淺嘗SVG動畫
- Go語言淺嘗之方法Go
- Word2Vec實驗淺嘗
- 嘗試用自己的話淺談 Nginx 反向代理Nginx
- 未來的元件化標準 —— 淺嘗Web Components元件化Web
- 獨家食用指南系列|Android端SQLite的淺嘗輒止AndroidSQLite
- Docker技術筆記:Docker入門淺嘗Docker筆記
- 嘗試說一說事件的使用事件
- 淺嘗Spring註解開發_Servlet3.0與SpringMVCServletSpringMVC
- 論文淺嘗 | 區分概念和例項的知識圖譜嵌入方法
- Scrcpy投屏原理淺析-嘗試用Flutter重寫它的客戶端Flutter客戶端
- iOS 使用UI控制元件的外觀協議UIAppearance進行設定預設UI控制元件樣式iOSUI控制元件協議APP
- 嘗試使用 docker 部署 Laravel 專案DockerLaravel
- 嘗試使用 pack 與 unpack 函式函式
- 淺談EventBus的使用原理
- 嘗試使用Knative建立一個應用
- 淺嘗Spring註解開發_AOP原理及完整過程分析(原始碼)Spring原始碼
- 淺嘗Spring註解開發_Bean生命週期及執行過程SpringBean
- 【JSON解析】淺談JSONObject的使用JSONObject
- java的數學工具淺使用Java
- laravel 5.5 嘗試使用 typescript 編寫 vue 元件LaravelTypeScriptVue元件
- 做產品要嘗試去找使用者的“緊急需求”
- 2024-07-18 淺嘗rollup-plugin-visualizer——檔案打包分析體積大小Plugin
- 嘗試
- 對於 sway 的嘗試
- 第一次嘗試使用java寫sparkJavaSpark
- 淺談Java和SAP ABAP的靜態代理和動態代理,以及ABAP面向切面程式設計的嘗試Java程式設計
- 前端的gitlab的ci初嘗試前端Gitlab
- 嘗試Ghost
- 嘗試1