2016-02-18 3 views
2

Когда я использую UILabel, я установил системный шрифт как:Что делать с CATextLayer, чтобы тот же шрифт отображался как системный шрифт в UILabel?

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

Теперь я пытаюсь использовать CATextLayer и я искал в Интернете и обнаружил, что система шрифты для прошивки 9 является San Francisco и имя шрифта .SFUIText-Medium, так что я пытаюсь установить имя шрифта, как:

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

Однако, шрифты, отображаемые на экране устройства не являются одинаковыми для UILabel & CATextLayer, как описано выше. Какое правильное имя шрифта должно использоваться в CATextLayer здесь, так что я могу иметь точно такой же шрифт, что и UILabel?

ответ

5

Поскольку iOS 7.0, UIFont и CTFont были «беспошлинными». Это означает, что вы можете обрабатывать 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, чтобы получить высоту для двух строк текста. Когда я устанавливаю эту высоту в CATextLayer, который использует тот же шрифт и размер шрифта, он отображает только одну строку текста и получает усечение. –

+0

После большего количества тестов действительно есть разница в высоте. Я добавляю около 5% к высоте UILabel, тогда все в порядке. –