2016-03-01 31 views
0

我試圖編寫一個UIFont擴展名來增加字體大小,當單詞顯示在5.5英寸的iPhone。聽到的是我的代碼:fontSize總是17當從故事板加載

public override class func initialize() { 
     struct Static { 
      static var token: dispatch_once_t = 0 
     } 

     dispatch_once(&Static.token) { 
      let originalSelector = Selector("systemFontOfSize:") 
      let swizzledSelector = Selector("systemFontOfFlexibleSize:") 

      let originalMethod = class_getClassMethod(self, originalSelector) 
      let swizzledMethod = class_getClassMethod(self, swizzledSelector) 
      method_exchangeImplementations(originalMethod, swizzledMethod); 
     } 

    } 

    class func systemFontOfFlexibleSize(fontSize: CGFloat)->UIFont { 
     print(fontSize) 
     if UIScreen.mainScreen().bounds.height >= 736.0 { 
      return self.systemFontOfFlexibleSize(fontSize + 2) 
     } else { 
      return self.systemFontOfFlexibleSize(fontSize) 
     } 
    } 

這個工作很好,當我使用的方法systemFontOfSize代碼。當我使用xib或storyboard創建標籤時,systemFontOfFlexibleSize仍然被調用,但無論我在故事板中設置了什麼,fontSize始終爲17。 有人可以解釋這個或任何其他優雅的解決方案嗎?

感謝您的幫助,提前致謝。

回答

0

我記得我有這個問題,也是一個前陣子,而且似乎有某種不可思議的bug它被設置在代碼之後的字體被複位。我相信我必須設置字體,然後再次設置字體大小以使其工作。下面是我的項目的代碼片段(但這是有點老了,所以我不記得這實際上清理的問題,或者我有一個大腦崩潰寫這篇文章的代碼):

label.font = UIFont(name: fontName, size: 14.0) 
label.font = label.font.fontWithSize(14) 

如果我沒有記錯,我不得不設置使用fontWithSize()字體大小明示或它根本沒有工作。雖然不完全確定,但認爲你至少可以嘗試。我無法真正將它集成到你的代碼中,因爲我不完全確定這裏幕後發生了什麼。

+0

我困惑的問題是,我不能得到正確的標籤(在故事板)fontSize的,當故事板負載。 – ZeroChow

+0

@ZeroChow所以你永遠不會改變代碼中的字體大小? – ClockWise

+0

是的。當storyboard加載時調用'systemFontOfFlexibleSize',但是我得到一個錯誤的fontSize – ZeroChow