2016-09-17 114 views
0

我有一個複數UILabels。當設備尺寸發生變化時,標籤的寬度和高度發生變化,所以我按比例縮小文本,使其適合標籤。我想要做的是從一個標籤獲取字體大小,並將其設置爲其他標籤的字體大小,以便所有內容都可以放在標籤內,但尺寸也相同。獲取字體大小

這是我重新縮放文本代碼:

Name_Label.numberOfLines = 1 
Name_Label.adjustsFontSizeToFitWidth = true 
Name_Label.lineBreakMode = NSLineBreakMode.ByClipping 

我能得到點大小爲其他答案建議:

Year_Label.font.fontWithSize(Name_Label.font.pointSize) 

但是,這並不工作,並評論認爲,這不返回字體大小。那麼如何獲得剛剛縮小的標籤的字體大小,並使用它來設置其他標籤的字體大小?

更新:當我打印下面的代碼輸出是相同的,但在模擬器中的大小是不同的。

Year_Label.font = Name_Label.font 

回答

0

經過更多的研究,我發現了Swift 3中的一個函數。但是,要更改大小,您必須設置最小字體比例(我忘了這麼做)。下面是斯威夫特2,工程代碼:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    Name_Label.numberOfLines = 1 
    Name_Label.adjustsFontSizeToFitWidth = true 
    Name_Label.lineBreakMode = NSLineBreakMode.ByClipping 

    func adjustedFontSizeForLabel(label: UILabel) -> CGFloat { 
     let text: NSMutableAttributedString = NSMutableAttributedString(attributedString: label.attributedText!) 
     text.setAttributes([NSFontAttributeName: label.font], range: NSMakeRange(0, text.length)) 
     let context: NSStringDrawingContext = NSStringDrawingContext() 
     context.minimumScaleFactor = label.minimumScaleFactor 
     text.boundingRectWithSize(label.frame.size, options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: context) 
     let adjustedFontSize: CGFloat = label.font.pointSize * context.actualScaleFactor 
     return adjustedFontSize 
    } 


    Name_Label.font = Name_Label.font.fontWithSize(adjustedFontSizeForLabel(Name_Label)) 
    Year_Label.font = Year_Label.font.fontWithSize(adjustedFontSizeForLabel(Name_Label)) 
    House_Label.font = House_Label.font.fontWithSize(adjustedFontSizeForLabel(Name_Label)) 
} 

鏈接到源:https://stackoverflow.com/a/38568278/6421669

0

您可以使用此類來適應標籤大小。只要告訴你的標籤是這個類。你也可以設置它是否應該水平或垂直檢查。 https://github.com/VolodymyrKhmil/BBBLibs/tree/master/BBBAutoresizedFontLabel

希望它有幫助。

+0

抱歉,這是一個很大的代碼,而我在工作迅速。 –

+0

你不需要粘貼它。只需將* .h文件導入橋接頭。比你所需要做的是告訴你的標籤是這個類。就這樣。真的很容易。 – Volodymyr

+0

它仍然不起作用,我沒有得到任何錯誤,大小隻是沒有改變。 –