2015-12-26 3 views
0

Я использую системный шрифт iOS (San Francisco для iOS 9+) в своем пользовательском расширении клавиатуры.Как я могу получить собственный вес шрифта для системного шрифта, между регулярным и светлым?

Я заметил, что шрифт, показанный на системной клавиатуре, имеет более легкий вес, чем UIFontWeightRegular, но он также смелее, чем UIFontWeightLight.

Как я могу реализовать шрифт в своей собственной клавиатуре с тем же весом, который используется на биржевой клавиатуре?

ответ

0

API systemFontOfSize:weight: API позволяет указать любой вес как CGFloat, а iOS вернет самый подходящий шрифт.

Например, вместо UIFont.systemFontOfSize(17, weight: UIFontWeightRegular) вы можете сделать UIFont.systemFontOfSize(17, weight: 0). Играйте с значением weight, чтобы определить, можете ли вы получить шрифт, который появляется по желанию.

Другим вариантом может быть использование HTML & CSS с атрибутной строкой. Используя font-weight, вы можете указать значение от 100 до 900, где 400 эквивалентно нормальному весу шрифта.

var htmlString = "<p>A</p>" 
htmlString += "<style>p{font-family:'-apple-system'; font-size:17px; font-weight:300}</style>" 
let htmlData = htmlString.dataUsingEncoding(NSUnicodeStringEncoding)! 
let attributedString = try! NSAttributedString(data: htmlData, options: [ 
    NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
    NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding 
], documentAttributes: nil) 
self.aLabel.attributedText = attributedString 

Обновление: Пытаясь справиться с этим, ни одно решение не позволяет более точно контролировать вес шрифта. Оба будут отображать текст с ближайшим шрифтом для данного веса - Regular или Light, но между ними нет ничего. Возможно, вам придется прибегнуть к пользовательскому текстовому рисунку, если вы хотите добавить более толстый штрих к тонкому шрифту. Вы можете исследовать чертеж через NSAttributedString's drawing API. Вы можете применить собственную ширину штриха с помощью NSStrokeWidthAttributeName. Я сам этого не пробовал, но это была мысль, которую можно было бы расследовать.

+0

Я попытался использовать 'CGFloat', а' UIFontWeightLight' шрифта SF - '-0.4'. И 'UIFontWeightRegular' является' 0', я установил его на '-0.2', чтобы получить средний вес между светом и регулярным, но он автоматически преобразуется в свет или регулярно, если число близко к которому. – TomSawyer

+0

Вы можете проверить, я не могу получить точно вес шрифта клавиатуры. – TomSawyer

+0

Вы можете попробовать использовать CSS @TomSawyer, см. Обновленный ответ – Joey

Смежные вопросы