2016-08-21 2 views
4

Я использую шрифт в своем приложении, что приводит к ужасному кернину, когда появляется 4 после a.Как установить кернинг только на одну комбинацию символов в swift?

В динамическом ярлыке пользовательского интерфейса, который иногда показывает .4, возможно ли программно увеличить кернинг , только если эти символы появляются бок о бок?

normal kerning

bad combo

+1

Использовать шрифт с более высоким качеством, вместо того, чтобы регулировать плохо скрученные пары? –

ответ

0

Если вы так склонны, вы можете попытаться разобрать Kern Table и, возможно, изменить UIFont/CFFont, чтобы удовлетворить ваши потребности. Я не дизайнер шрифтов, поэтому я просто добавлю наблюдателя на ярлык и посмотрю, подходит ли для применения кернинга .4.

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.label.addObserver(self, forKeyPath: "text", options: [.New], context: nil) 
} 

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    if object === self.label, 
     let change = change, 
     let newValue = change[NSKeyValueChangeNewKey] as? NSString, 
     let attributedText = self.label.attributedText?.mutableCopy() as? NSMutableAttributedString { 

     let matchRange = newValue.rangeOfString(".4") 
     if matchRange.location == NSNotFound { 
      attributedText.removeAttribute(NSKernAttributeName, range: NSMakeRange(0, newValue.length)) 
     } else { 
      let kernRange = NSMakeRange(matchRange.location, matchRange.length - 1) 
      attributedText.setAttributes([NSKernAttributeName: 10], range: kernRange) 
     } 

     self.label.attributedText = attributedText 
    } 
} 
+0

спасибо за ваш ответ - я новичок, поэтому я не смог заставить это работать в моей настройке, но у меня есть чувство, что другие будут успешными. еще раз спасибо – Nate

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