Персонализираната базова линия на UIFont е изместена

Имам проблем с персонализирани UIFonts. Зареждам 6 от тях (шрифт A в обикновен/удебелен/обикновен Italic/boldItalic, шрифт B в съкратени/кондензирани наклонени варианти).

Въпреки това, ето какво дава, когато се визуализира: въведете описание на изображението тук

Първите два реда са ОК, но последният показва проблем с базовата линия.

Опитах да променя UPM, ascender, descender, x-height на шрифта във FontLab, така че да съответства на стойностите на първия шрифт (които се изобразяват правилно), но без резултат. Опитах се да конвертирам формата на шрифта от OTF в TTF, без успех. Каквото и да опитам, винаги се изобразява по този начин.

Някой има ли опит с това?


person Cyrille    schedule 26.01.2012    source източник
comment
Хей, имате ли решение за това. Опитах много неща, но не намерих правилното решение. Дори този проблем е с някои специфични шрифтове, но не за всички.   -  person Mrunal    schedule 18.02.2012
comment
Коментирайте напредъка ми досега: Намерих друг .otf файл за същия шрифт; този път работи перфектно. В понеделник сутринта ще проуча разликите между двата шрифта, по-специално частта за показателите на шрифта във FontLab, и ще докладвам какво ще намеря.   -  person Cyrille    schedule 25.02.2012
comment
Същият проблем: stackoverflow.com/questions/7535498/, stackoverflow.com/questions/5414730/   -  person Pavel Alexeev    schedule 06.03.2012
comment
Благодаря, Павел, според моето проучване наистина е имало проблем с асцендърите. Поправих го тази сутрин, като редактирах шрифта във FontLab, но в общи линии направих същото, което ти направи с ftxdumperfuser. Ако имате нещо против да копирате/поставите отговора си тук, ще го маркирам като правилен и ще ви дам точките.   -  person Cyrille    schedule 06.03.2012


Отговори (6)


Тук или дори тук можете да намерите решенията за вас. Всичко е свързано с базовата линия.

Забележка Има проблем с инсталирането на Apple Fonts Utility на El Capitan. Вижте https://apple.stackexchange.com/questions/211138/apple-font-tools-cannot-install-in-macbook-pro-el-capitan за заобиколно решение.

За да ги редактирате в шрифта, ще трябва да изтеглите Apple Font Tool Suite. След като инсталирате това, трябва да отворите терминала и да отидете до директорията, която съдържа вашия шрифт. След това въведете следната команда:

  1. ftxdumperfuser -t hhea -A d font.ttf Това ще създаде файл, наречен font.hhea.xml, ще отвори този нов файл в текстов редактор и ще коригира стойностите за ascender и descender. Обикновено, ако шрифтът ви е твърде нисък, искате да намалите възходящия и да увеличите низходящия. След редактиране и записване въведете следната команда в терминала, за да възстановите вашия файл с шрифтове:

  2. ftxdumperfuser -t hhea -A f font.ttf Вече можете да използвате файла font.ttf във вашето приложение. Ако шрифтът все още не е правилен, просто повторете горната процедура, докато не сте доволни.

ИЛИ можете лесно да промените NSBaselineAttributeName, както следва:

NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:@"a string"
                              attributes:@{ NSBaselineOffsetAttributeName : @-13 }];
person art-divin    schedule 28.06.2013
comment
Както беше обещано преди около една година (вижте коментарите към моя въпрос), ето точките за вас! - person Cyrille; 28.06.2013
comment
Мисля, че NSBaselineOffsetAttributeName беше отхвърлен в ios6. developer.apple.com/LIBRARY/ios/ releasenotes/General/ Поради проблеми със съвместимостта, атрибутът NSBaselineOffsetAttributeName вече не се поддържа в iOS 6. Имам този проблем с вградения Helvetica-Neue =[ Не мога да го поправя. - person Sean Dunford; 09.04.2014
comment
@SeanDunford UIKIT_EXTERN NSString *const NSBaselineOffsetAttributeName NS_AVAILABLE_IOS(7_0); // NSNumber containing floating point value, in points; offset from baseline, default 0 основно NSBaselineOffsetAttributeName е специфична за iOS 7.x константа - person art-divin; 10.04.2014
comment
Инструментите за шрифтове на Apple не могат да се инсталират в Macbook Pro El Capitan. Вижте apple.stackexchange.com/questions/211138/ за заобиколни решения. - person Vadim Yelagin; 24.02.2016
comment
@VadimYelagin благодаря, поставих коментара ви в публикацията. - person art-divin; 17.02.2017
comment
Това свърши работа за мен. Един проблем с тийнейджърството е, че не ви казва какви стойности да използвате за Ascender и Descender. Използвах 0 и на двете и работи добре (първоначално бяха нещо като 673 и -321). - person user875234; 27.09.2018
comment
За тези, които използват Catalina, ето как да изпълнят командата на терминала, в случай че също срещнете проблема с командата, която не е намерена. superuser .com/questions/1475680/ - person Teffi; 06.12.2019

Здравейте, аз също се сблъсках с такъв проблем по това време, зададох Title Content Edge съответно за UIButton.

Така че, ако използвате тези шрифтове за UIButton, тогава със сигурност можете да използвате това.

въведете описание на изображението тук

Надявам се, че това ще ви помогне.

person Mrunal    schedule 12.02.2012
comment
Това е добре за UIButtons, но какво да кажем за другите контроли? Ами ако утре клиентът ми поиска друг шрифт? - person Cyrille; 12.02.2012
comment
Просто опитайте с един UILabel с централно подравняване. Предполагам, че ще се сблъскате с този проблем само за UIButtons, а не никъде другаде. - person Mrunal; 12.02.2012
comment
Екранната снимка, приложена към въпроса ми, очевидно показва, че не се сблъсквам само с проблема с UIButtons, но и с UITextFields и всъщност за всички контроли. Проблемът е присъщ на показателите на самия шрифт, а не на изобразяването на един конкретен контрол в UIKit. - person Cyrille; 12.02.2012
comment
@Cyrille: За UILable и UITextFields можете да коригирате, като промените местоположението му нагоре-надолу, гледната точка на крайния потребител няма промяна в потребителския интерфейс. Но за Button, поради неговите граници, изискваме да зададем съответно текстови вмъквания. - person Mrunal; 07.06.2013

Друго интересно решение, което намерих, идва от следната публикация: http://www.andyyardley.com/2012/04/24/custom-ios-fonts-and-how-to-fix-the-vertical-позиция-проблем/

Така че трябва да проверите дали това е случаят с вашия шрифт, както той казва там в един от коментарите:

Моето решение всъщност коригира персонализирания шрифт, за да работи с механизма за изобразяване на iOS, което ви позволява да го използвате като директен заместител на стандартните шрифтове без никакви модификации.

И как го прави?

По принцип той предлага редактиране на показателите на шрифта с помощта на външен инструмент на Apple (вижте справочника за показателите на шрифта на https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html#//apple_ref/doc/uid/TP40009542-CH4-SW66)

За да ги редактирате в шрифта, ще трябва да изтеглите Apple Font Tool Suite. След като инсталирате това, трябва да отворите терминала и да отидете до директорията, която съдържа вашия шрифт. След това въведете следната команда:

ftxdumperfuser -t hhea -A d font.ttf

Това ще създаде файл, наречен font.hhea.xml, ще отвори този нов файл в текстов редактор и ще коригира стойностите за ascender и descender. Обикновено, ако шрифтът ви е твърде нисък, искате да намалите възходящия и да увеличите низходящия. След редактиране и записване въведете следната команда в терминала, за да възстановите вашия файл с шрифтове:

ftxdumperfuser -t hhea -A f font.ttf

Вече можете да използвате файла font.ttf във вашето приложение. Ако шрифтът все още не е правилен, просто повторете горната процедура, докато не сте доволни.

person Nech    schedule 05.10.2014
comment
Въпреки че тази връзка може да отговори на въпроса, по-добре е да включите основните части от отговора тук и да предоставите връзката за справка. Отговорите само за връзка могат да станат невалидни, ако свързаната страница се промени. - person honk; 05.10.2014

Трябва да проверите тези шрифтове един до друг в някакъв векторен софтуер като Adobe Illustrator или CorelDraw. Ако откриете, че шрифтовете се изобразяват по същия базов компенсиран начин и в този софтуер, тогава има нещо общо със самия шрифт. т.е. шрифтовете могат да бъдат създадени с такова отместване на пикселите във файла с шрифтове. Следователно няма нужда да правите подобни промени в параметрите .xib за всеки UIButton или UITextField и т.н.

Споделете вашите файлове с шрифтове тук, ако е възможно.

person Ralph    schedule 24.02.2012
comment
Това е, което ще направя във FontLab, тъй като намерих друг .otf от същия шрифт, който не проявява основния проблем. - person Cyrille; 25.02.2012

може би погледнете свойството на UITextView / UITextLabel 'thLabel.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;'

това определя вертикалното подравняване. Беше ми полезно преди няколко дни в подобен случай

person pmk    schedule 24.02.2012
comment
Това е добро решение, но не е истинско универсално решение. Например, това не решава проблема с подравняването за UIBarButtonItems. - person Cyrille; 25.02.2012
comment
UITextView не наследява от UIControl, а UITextLabel не съществува в Cocoa Touch, доколкото знам. Може би си мислите за UITextField, което наследява от UIControl и следователно има свойството contentVerticalAlignment, което описвате. - person Tim Arnold; 27.08.2013

Между другото, Apple Font Tool Suite не е единствената програма, която може да ви помогне. Така че, ако не искате да инсталирате виртуално копие на macOs, можете да използвате FontForge за Windows, за да играете с възходящ и низходящ: елемент -> информация за шрифта, след това раздел OS/2 и след това показатели. И не забравяйте да поставите отметка в квадратчето „Apple“, когато генерирате шрифт в края. Късмет!

person Able    schedule 13.11.2013