2013-02-12 6 views
3

У меня есть NSTextField в окне окна.Вертикальное изменение размера NSTextField при изменении размера окна пользователем

Я пробовал все варианты IB, но я не могу показаться, чтобы достичь следующие:

Существует довольно длинное предложение в NSTextField - при изменении размеров окна, более узкой шириной NSTextField также получает более узкой - который нажимает текст на следующую строку. Однако любой текст, который подталкивается ниже нижней части NSTextField, просто отключается. Я бы хотел, чтобы NSTextField расширял свой размер по вертикали, чтобы разместить более высокий текст.

Это можно сделать автоматически или я должен наблюдать событие изменения размера окна и пересчитать высоту NSTextField?

Мне нужно поддерживать 10.7 и 10.8, и я попытался использовать Autolayout и Autoresising, но безрезультатно.

EDIT - это код, который работал на основе ответа Джерри (и его категории от Github):

-(void)setFrame:(NSRect)frameRect{ 

    NSRect myFrame = CGRectMake(frameRect.origin.x, frameRect.origin.y, frameRect.size.width, [self.stringValue heightForWidth:frameRect.size.width attributes:nil]); 
    [super setFrame: myFrame]; 
} 
+1

Вы можете найти полезную информацию здесь: http://stackoverflow.com/questions/10463680/how-to-let-nstextfield-grow- with-the-text-in-auto-layout – Monolo

+0

Спасибо Monolo - на самом деле лучше использовать категорию Джерри в сочетании с - (NSSize) intrinsicContentSize, так как мне не нужно явно устанавливать кадр, и поэтому он сохранил автоматический макет по порядку. Жизнь хороша. – petenelson

ответ

2

Autolayout работает на более высоком уровне. Я думаю, вам нужно изменить размер текстового поля.

Вы можете попробовать отправить -sizeToFit в текстовое поле, но это, вероятно, будет расширяться горизонтально, а не вертикально. Поэтому, если это не работает, посмотрите на методы -heightForWidth :: в моем NS(Attributed)String+Geometrics category. Используя этот метод, вы можете подклассифицировать NSTextField и переопределить -sizeToFit для расширения по вертикали. Было бы здорово включить изменение размера как в setFrame: так и в setStringValue: чтобы он всегда поддерживал соответствующую высоту.

Autolayout должен взять на себя оттуда, переместив и изменив размер подкатегорий sibling по мере необходимости.

+0

Да, что работает - спасибо Джерри. Я сделал подкласс NSTextField и переопределил setFrame: мне нужно немного отточить это, но есть доказательство концепции - спасибо - и спасибо за вашу категорию, а также для расчета высоты. Я добавил некоторые подробности выше – petenelson

0

Используйте этот подкласс расширить высоту по ширине изменения:

@interface MyTextField : NSTextField 

@property (nonatomic, assign) BOOL insideDeepCall; 

@end 

@implementation MyTextField 

- (void)layout 
{ 
    [super layout]; 

    if (!self.insideDeepCall) { 
    self.insideDeepCall = YES; 
    self.preferredMaxLayoutWidth = self.frame.size.width-4; 
    [self.superview layout]; 
    self.insideDeepCall = NO; 
    } 
} 

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