xib適配機型

 

從接觸ios開始,我就是忠實的可視化開發的搬運工——俗稱UI拖拽師!
本編主要送給那些年熱愛xib,喜歡效率的ios程序猿們。它可能解決你多年的心病!一直揮散不去的禁錮於代碼的約束,一羣技術大牛此時應該會鄙視,但我樂此不疲。
正題開始:此篇文章的主要內容是利用運行時和xib的機制,用少許的代碼適配所有機型。簡單粗暴而不失優雅!用了我這套方法你只要在375的xib裏面隨心所欲的約束,然後就可以適配劉海屏,plus屏,se屏等等。

  • 首先我要引入一個關鍵字IBDesignable(此處應該有些掌聲)
    這個神奇的關鍵字IBDesignable的效果就是給xib的右邊欄加一個屬性列表,然後你可以通過屬性列表將其賦值以達到針對不同機型來適配屏幕。

     

     

  • 上圖清晰的說明操作
    1.建一個NSLayoutConstraint類別,給他加屬性。
    請注意給類別加屬性需要用到運行時來實現。原理不就細說了,自己找度娘。繼續上圖

     

     

注意宏的定義是這個方法的關鍵,通過當前屏幕的尺寸和375的尺寸做對比。

 

 

做完這個功夫後,就差最後一步達到效果就是去開啓這個效果!

 

image.png

image.png

選中一個縱向的約束 然後對應的去打開,由於我的命名太長被...代替了,他的順序是和h文件命名的順序一樣,第一個是W橫向的,第二個是H縱向的。所以我們打開縱向的。IBDesignable的關鍵詞就起了作用,屬性添加的是Bool值所有選的時候會出現ON和OFF。
通過這個操作,就可以隨意操作xib了。然後佈局完成後對應把所有的縱向和橫向的依次設置一下開關,他就會隨着屏幕的尺寸而放大和縮小。

  • 很多朋友又要說:你這個值適配了約束,字體又不會變。那這個又怎麼實現呢。來吧。第二步來了,幹字體。
    字體怎麼加呢。其實也很簡單!用運行時,根據xib的加載機制。在他加載的某個階段把當下的字體取出來,然後根據相應的機型去設置字體大小就行了。來來來上圖

     

     

利用runtime實現方法的轉換,通過屏幕變換的比例進行字體的縮放;

#import <objc/runtime.h>

@implementation UIFont (runtime)

+ (void) load{

    Method   newMethod =  class_getClassMethod([self class],@selector (adjustFont:));

    // 獲取替換前的類方法

    Method method = class_getClassMethod([self class], @selector(systemFontOfSize:));

    // 然後交換類方法,交換兩個方法的IMP指針,(IMP代表了方法的具體的實現)

    method_exchangeImplementations(newMethod, method);

}

 

+ (UIFont *) adjustFont:(CGFloat)fontSize{

    UIFont *newFont = nil;

    newFont = [UIFont adjustFont:fontSize * [UIScreen mainScreen].bounds.size.width/375.0];

    return newFont;

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章