2013-08-29 3 views
3

На NSTextField Я настраиваю собственный шрифт размером 140. Текст установлен на «28». Но, как вы можете четко видеть на изображении, текстовое поле имеет много места сверху. Это происходит только с некоторыми типами шрифтов, но не со всеми. Мой вопрос в том, какая информация из шрифта может влиять на текстовое поле, которое заканчивает обрезку текста? (Ascender, Высота крышки?). И если да, могу ли я изменить файл шрифта, чтобы исправить его?Неверные значения шрифта

enter image description here

+0

Я тоже видел это и не только с большим текстом. Например, в IB, для простой метки, переключитесь с Lucida Grande (по умолчанию на ML) на Helvetica Neue. Положение текста изменяется на отдельные пиксели (но оно почти фиксируется, когда вы устанавливаете его в режим одиночной линии). –

ответ

2

Базовый будет варьироваться между шрифтами. Кроме того, существуют другие показатели, которые различаются. Вы можете обойти эту проблему с помощью NSAttributedString. Вы можете попробовать изменить атрибут NSBaselineOffsetAttribute и из набора параграфовMinimumLineHeight и setMaximumLineHeight. Ниже приведен пример. Обязательно создайте две метки textField и подключите их розетки.

self.Label1.stringValue = @"Test Text"; 
// 
// baseline is different for each font! 
// 
//self.Label2.stringValue = @"Test Text"; 

NSFont *otherFont = [NSFont fontWithName:@"MarkerFelt-Thin" size:40.0f]; 
NSNumber *baseline = [[NSNumber alloc] initWithFloat: 5.0f]; 

NSMutableParagraphStyle *paraStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
[paraStyle setParagraphSpacingBefore:20.0f]; 
[paraStyle setMinimumLineHeight:30.0f]; 
[paraStyle setMaximumLineHeight:50.0f]; 

NSDictionary *otherFDict = [NSDictionary dictionaryWithObjectsAndKeys: paraStyle, NSParagraphStyleAttributeName, 
          otherFont, NSFontAttributeName, baseline, NSBaselineOffsetAttributeName, nil]; 

NSMutableAttributedString *otherText = [[NSMutableAttributedString alloc] initWithString:@"Test Text" attributes:otherFDict]; 

self.Label2.attributedStringValue = otherText; 
Смежные вопросы