ios NSMutableAttributedString NSKernAttributeName неправильный кернинг с буквами fl и fi

Я использую attributed strings на метках, чтобы изменить расстояние между буквами:

var attributedString=NSMutableAttributedString(string: "Fifi floflo")
attributedString.addAttribute(NSKernAttributeName, value: CGFloat(10), range: NSRange(location: 0, length: attributedString.length))
label.attributedText=attributedString

Кернинг работает хорошо, за исключением двух групп букв: «fl» и «fi» (возможно, других я не видел в данный момент). Я использую шрифт «Avenir-medium», но я тестировал базовый шрифт Arial, и проблема все еще возникает.

Со словом

Со словом Fifi floflo'


person Marie Dm    schedule 19.08.2015    source источник


Ответы (1)


NSAttributedStrings поставляются с включенными лигатурами по умолчанию. Лигатуры объединяют нависающие комбинации символов в отдельные глифы. Если вы применяете интервалы между буквами, вам нужно отключить их, иначе эти глифы буквенных пар не будут разделяться.

attributedString.addAttribute(NSLigatureAttributeName, 
  value:0, 
  range: NSRange(location: 0, length: attributedString.length))

Из документов:

NSligatureAttributeName

Значение этого атрибута — объект NSNumber, содержащий целое число. Лигатуры вызывают отображение определенных комбинаций символов с использованием одного пользовательского глифа, соответствующего этим символам. Значение 0 указывает на отсутствие лигатур. Значение 1 указывает на использование лигатур по умолчанию. Значение 2 указывает на использование всех лигатур. Значение по умолчанию для этого атрибута — 1. (Значение 2 не поддерживается в iOS.)

person foundry    schedule 19.08.2015
comment
Я только что нашел решение из документа. - person Marie Dm; 19.08.2015