iOS - Xib/Storyboard Helper

前言


對于 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搭建的效果圖

圖1.png
圖2.png

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)

圖3.png
圖4.png

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

圖5.png
  • 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傳送門,喜歡的話給個小星星喔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 歡迎使用蜜寶筆記 @(示例筆記本)[馬克蜜寶|幫助|Markdown] MiboNote是一款專為蜜寶筆記(Mib...
    console_log閱讀 293評論 0 0
  • ## 超快速標(biāo)記入門 正如在“準(zhǔn)備步驟”中所討論的那樣,Ulysses 在文本段落附近使用特殊字符讓您定義這些段落...
    JohneySong閱讀 457評論 0 0
  • http://bbs.tianya.cn/post-16-1628647-2.shtml http://blog....
    指尖的跳動閱讀 370評論 0 0
  • 先寫外觀設(shè)計,再寫系統(tǒng)的視覺設(shè)計,最后寫交互設(shè)計。 外觀,拿起T1我就開始用手指撫摸其背面的玻璃,這是一塊經(jīng)過3D...
    少許閱讀 297評論 0 1
  • 本文觀點是參考,水泡球老師的網(wǎng)易公開課、朋友圈的一篇文章《以后將沒有純視覺設(shè)計師》、并結(jié)合自身經(jīng)歷提出的,希望可以...
    丹頂鶴的日記本閱讀 1,318評論 3 28

友情鏈接更多精彩內(nèi)容