2016-09-17 144 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

它仍然不起作用,我没有得到任何错误,大小只是没有改变。 –