前言
對于 UI 界面的編寫工作,是否應(yīng)該用 xib/storyboard 完成,一直是iOS開發(fā)中的爭議,然而本文并參與討論這個話題。(手動笑臉)
有興趣的朋友可以參考唐巧的這篇文章
本文只是為喜歡使用或是想去使用 xib/storyboard 的朋友,提供一個強(qiáng)大的工具。在使用 xib/storyboard的時候,更加方便靈活,同時也為 xib/storyboard在添加約束,適配屏幕上做了一些改進(jìn),使之使用起來更加簡單有效
更新日志
2019-04-01 ~ cocoapods version 1.2.3
-
由于 xcode 10 對xib/storyboard 的渲染 支持性較之前版本更差(有猜測對設(shè)備的要求更高), 故將常用屬性提到Basis文件夾
建議使用 以下方式導(dǎo)入//pod 導(dǎo)入 pod 'IBProperty/Basis'
2018-10-30 ~ cocoapods version 1.2.0
- 解決因為IBProperty 引起的
Failed to render and update auto layout錯誤, 這是一個渲染錯誤,并不會影響程序的運行。
2018-07-07 ~ cocoapods version 1.1.9
- 解決極少部分block循環(huán)引用的問題
2018-06-18 ~ cocoapods version 1.1.8
- CornerRadius:移除mask實現(xiàn)方式,因為mask會觸發(fā)離屏渲染?;謴?fù)并優(yōu)化了Core Graphics繪制圓角
- 解決漸變和圓角同時設(shè)置偶爾會發(fā)生沖突的問題
- AdaptXBottowConstant:加入iPhone X底部約束適配
2018-06-11 ~ cocoapods version 1.1.7
- 截圖:此前有一張截圖中的iPhone SE 顯示不完整,是由于因為款 mac-pro 上 se模擬器縮放到最小,引發(fā)的渲染問題,類似于tableView的橫線。感謝網(wǎng)友limingLiuBaBa指出
- Gradient:為所有視圖加入了簡單的漸變色處理,細(xì)節(jié)見文末。
- CornerRadius:由layer的mask 替換之前的Core Graphics繪制。
所有屬性見文末Property
IBProperty
下圖為IBProperty通過Storyboard搭建的效果圖


IBProperty 通過IB_DESIGNABLE 和 IBInspectable 以類目的形式為xib/storyboard 添加了一些簡單有效的新屬性,如陰影、圓角、毛玻璃等(具體見本文最后)
在xib/storyboard上要做到完美適配,需要添加很多較為復(fù)雜的約束,如果需要讓約束的常量適配的話,就需要通過代碼去設(shè)置了;字體的適配也是如此,通過IBProperty只需要在xib/storyboard設(shè)置一個屬性就OK了。這些適配不僅體現(xiàn)在約束和字體上,IBProperty還提供了一系列適配方式,讓xib/storyboard 在屏幕適配上也更加簡單。
安裝
(oc、swift 無區(qū)別)
-
使用cocoapods (推薦)
pod 'IBProperty' 手動下載
從Github地址 下載項目,然后將IBProperty 和 Aspects(如果項目中已經(jīng)集成 則不需要) 文件夾拖入到工程中即可
使用
IBProperty只需要集成到項目中就可以為xib/storyboard服務(wù)了
然后你就可以在xib/storyboard 選中對象賦值了(具體屬性及含義參照本文最后)
比如你要適配一個約束(圖3),或是為UITextView加上placeholder(圖4)


IBProperty不需要引用任何頭文件,除非確實需要在代碼中使用(事實上,并不推薦這么做)
因為IBProperty旨在服務(wù)于xib/storyboard,其中大部分屬性都只是計算型屬性,少部分屬性無法間接獲取的,通過getter 也將無法獲取它,因為并沒有為它真正開辟內(nèi)存。此外,在代碼中使用IBProperty,對同一個屬性做多次賦值,可能會多次適配,導(dǎo)致一些奇怪的bug。總之,如果確實需要在代碼中使用IBProperty,一定要對源碼比較熟悉才行
Property
-
UIView
//border ib_borderWidth; ib_borderColor; //cornerRadius ib_cornerRadius; //視圖的 cornerRadius 始終保持高度的一半 ib_cornerCircle; //shadow ib_shadowOffset; ib_shadowColor; ib_shadowOpacity; ib_shadowRadius; /* * 漸變開始顏色 - 漸變結(jié)束顏色 只設(shè)置開始顏色 漸變將由alpha 0.3 - 0.1; 只設(shè)置結(jié)束顏色 漸變將由alpha 0.1 - 0.3 */ ib_gradientStartColor; ib_gradientEndColor;注: IBProperty僅對圖片視圖的圓角(ib_cornerRadius、ib_cornerCircle) 做了離屏渲染處理
下圖(圖5)上為只設(shè)置ib_gradientStartColor, 下為只設(shè)置ib_gradientEndColor

-
UILabel
// 根據(jù)屏幕的寬度 適配 字體大小 ib_adaptFont; // 給文字添加 下劃線 ib_underLine; // 給文字添加中間橫線 ib_middleLine; -
UIButton
// 根據(jù)屏幕的寬度 適配 字體大小 ib_adaptFont; // 根據(jù)屏幕的寬度 適配 contentEdgeInsets、titleEdgeInsets、imageEdgeInsets ib_adaptInsets; -
UIControl
// 禁止重復(fù)點擊(2秒內(nèi)不能重復(fù)點擊) ib_reClickEnabled; -
UITextField
// 根據(jù)屏幕的寬度 適配 字體大小 ib_adaptFont; -
UITextView
// 根據(jù)屏幕的寬度 適配 字體大小 ib_adaptFont; // 類似于UITextField的placeholder ib_placeholder; -
UIImageView
// 亮色模糊效果(毛玻璃) ib_darkEffect; // 暗色色模糊效果 ib_lightEffect; // 模糊效果不透明度 ib_effectOpacity; -
UICollectionViewFlowLayout
// 根據(jù)屏幕的寬度 適配 itemSize ib_adaptSize; // collectionView每行顯示的item的個數(shù),自動適配屏幕 ib_numberItemsForRow; -
NSLayoutConstraint
// 根據(jù)屏幕的寬度 適配 約束常量 constant ib_adaptConstant; // 若為YES constant將不會適配比例,而是在iPhone X 上加上24pt, 常用于 為自定義導(dǎo)航欄的子視圖添加約束 ib_adaptXTopConstant; //若為YES constant將不會適配比例,而是在iPhone X 上加上34pt, 常用于某些底部彈窗 ib_adaptXBottowConstant
后續(xù)
IBProperty處于不間斷更新當(dāng)中,讀者有較好的建議或意見,都可以在GitHub或是本文評論區(qū)提出issue,每次更新都會在GitHub和本文上記錄更新日志。
最后是GitHub傳送門,喜歡的話給個小星星喔