Ищете, по существу, какао-эквивалент [UILabel adjustsFontSizeToFitWidth]
.Как я могу указать NSTextField для автоматического определения размера шрифта в соответствии с его текстом?
ответ
Я использовал превосходную строчку NS (Attributed) Джерри Кринока + Geometrics (located here) и небольшой метод, подобный следующему. Меня все еще интересует более простой способ.
- (void) prepTextField:(NSTextField *)field withString:(NSString *)string
{
#define kMaxFontSize 32.0f
#define kMinFontSize 6.0f
float fontSize = kMaxFontSize;
while (([string widthForHeight:[field frame].size.height font:[NSFont systemFontOfSize:fontSize]] > [field frame].size.width) && (fontSize > kMinFontSize))
{
fontSize--;
}
[field setFont:[NSFont systemFontOfSize:fontSize]];
[field setStringValue:string];
[self addSubview:field];
}
Не забудьте посмотреть в суперклассах. NSTextField - это своего рода NSControl, и каждый NSControl отвечает на the sizeToFit
message.
Я решил это, создав подкласс NSTextFieldCell, который переопределяет строковый чертеж. Он смотрит, подходит ли строка, и если она не уменьшает размер шрифта, пока он не подходит. Это может быть сделано более эффективным, и я не знаю, как он будет себя вести, когда cellFrame
имеет ширину 0. Тем не менее это было хорошо Enough ™ для моих нужд.
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSAttributedString *attributedString;
NSMutableAttributedString *mutableAttributedString;
NSSize stringSize;
NSRect drawRect;
attributedString = [self attributedStringValue];
stringSize = [attributedString size];
if (stringSize.width <= cellFrame.size.width) {
// String is already small enough. Skip sizing.
goto drawString;
}
mutableAttributedString = [attributedString mutableCopy];
while (stringSize.width > cellFrame.size.width) {
NSFont *font;
font = [mutableAttributedString
attribute:NSFontAttributeName
atIndex:0
effectiveRange:NULL
];
font = [NSFont
fontWithName:[font fontName]
size:[[[font fontDescriptor] objectForKey:NSFontSizeAttribute] floatValue] - 0.5
];
[mutableAttributedString
addAttribute:NSFontAttributeName
value:font
range:NSMakeRange(0, [mutableAttributedString length])
];
stringSize = [mutableAttributedString size];
}
attributedString = [mutableAttributedString autorelease];
drawString:
drawRect = cellFrame;
drawRect.size.height = stringSize.height;
drawRect.origin.y += (cellFrame.size.height - stringSize.height)/2;
[attributedString drawInRect:drawRect];
}
Чтобы шрифт был правильно центрирован по вертикали, следующая строка нужна прямо перед 'while':' [mutableAttributedString removeAttribute: @ "NSOriginalFont" range: NSMakeRange (0, [mutableAttributedString length])]; ' – DarkDust
- 1. UILabel Настройка шрифта в соответствии с текстом
- 2. Изменение размера фона в соответствии с текстом
- 3. Изменение размера UILabel в соответствии с текстом
- 4. динамически изменять размер шрифта NSTextfield
- 5. Обычай автоматического определения размера WPF класса Panel
- 6. JTextArea - шнурок в соответствии с существующим текстом
- 7. Используйте UIImage с текстом или UILabel для автоматического масштабирования текста
- 8. Настройка размера шрифта на основе высоты строки в NSTextField
- 9. Как изменить размер шрифта JButton в соответствии с его размером?
- 10. Как я могу получить iframe для автоматического изменения размера, когда изменяется его «src»? (С помощью JQuery)
- 11. Изменение размера TextView в соответствии с текстом установить
- 12. Изменение размера текстового поля/текстового поля в соответствии с текстом
- 13. Weird поведение шрифта на NSTextField
- 14. iOS: Как установить фрейм UILabel в соответствии с его текстом?
- 15. как я могу сделать слайдер с текстом
- 16. Looping массив фиксированного размера без определения его размера в С
- 17. Проблемы с макетом текста с текстом при изменении шрифта для приложения с использованием автоматического макета
- 18. Окончательный метод для определения размера шрифта в css
- 19. Как я могу выровнять элемент в соответствии с его фоном?
- 20. Как изменить размер шрифта при изменении размера в соответствии с его родительским полем?
- 21. Изменение размера JButtons и других компонентов в соответствии с текстом
- 22. Java - Изменение размера шрифта в соответствии с областью
- 23. Как инициализировать char * без определения его размера
- 24. Изменение размера шрифта в соответствии с размером экрана
- 25. Могу ли я использовать автоматический макет для изменения размера окна в соответствии с размером метки?
- 26. Автоматического изменение размера фон с текстом и annimated GIF вложен
- 27. Adobe Flex - любой способ автоматического изменения размера шрифта для его размещения в контейнере?
- 28. Инициализировать NSTextfield с пользовательским текстом программно
- 29. NSTextField placeholderAttributedString Изменения размера
- 30. UILabel не настраивается в соответствии с текстом
Я ответил на это для кого-то еще. Вы можете увидеть мой ответ [здесь] (http://stackoverflow.com/questions/2908704/get-nstextfield-contents-to-scale/2911982#2911982). – regulus6633