2016-02-18 33 views
2

当我使用UILabel,我将系统设置字体为:如何处理CATextLayer以在UILabel中显示与系统字体相同的字体?

label.font = UIFont.systemFontOfSize(18, weight: UIFontWeightMedium) 

现在我尝试使用CATextLayer,我在网上搜索,结果发现,适用于iOS 9系统字体是San Francisco和字体名称是.SFUIText-Medium,所以我尝试设置的字体名称为:

textLayer = CATextLayer() 
textLayer.font = CTFontCreateWithName(".SFUIText-Medium", 18, nil) 

然而,在设备屏幕上显示的字体是不一样的用于UILabel & CATextLayer如上所述。 CATextLayer这里使用的正确字体名称是什么,以便我可以显示与UILabel完全相同的字体?

回答

5

由于iOS 7.0,UIFontCTFont已经“免费桥接”。这意味着您可以将UIFont视为CTFont,反之亦然。因此:

let view = UIView(frame: CGRectMake(0, 0, 200, 100)) 
view.backgroundColor = UIColor.whiteColor() 

let layer = CATextLayer() 
layer.font = UIFont.systemFontOfSize(18, weight: UIFontWeightMedium) 
layer.string = "Hello" 
layer.frame = view.bounds 
layer.foregroundColor = UIColor.blackColor().CGColor 
view.layer.addSublayer(layer) 

XCPlaygroundPage.currentPage.liveView = view 
print(layer.font) 

结果:

screen shot

Optional(<UICTFont: 0x7f904bf38960> font-family: ".SFUIText-Medium"; font-weight: normal; font-style: normal; font-size: 18.00pt) 
+0

太好了!现在字体看起来一样,但是看起来高度不一样。我使用'sizeToFit()'通过UILabel获取2行文本的高度。当我将此高度设置为使用相同字体和字体大小的CATextLayer时,它只显示一行文本并被截断。 –

+0

经过更多的测试,确实有一些高度差异。我给UILabel的身高增加了大约5%,那就没事了。 –

相关问题