NSTextView или NSTextField автоматически изменяет размер рамки/рамки?

Я пытаюсь использовать либо NSTextView, либо NSTextField, который отображает текст, который я добавляю через textField.stringValue = [dictionary objectForKey:@"info"];

Проблема в том, что мне нужна граница/рамка текстовой области для вертикального изменения размера, чтобы показать весь текст. Текст варьируется от нескольких слов (1 строка) до абзаца или двух.

Когда я пытаюсь [textField sizeToFit];

Он изменяет размеры всего до одной строки, которая абсурдно слишком длинна (и выходит из вида). Мне нужно, чтобы он автоматически изменял размер своей ширины в соответствии с текущей шириной окна и основывался на том, чтобы изменить размер своей высоты, чтобы показать весь текст.

Любые идеи о том, что попробовать или направление? Это для OSX no iOS.

(Этот TextField или TextView находится в View Based - NSTableView. Поэтому я в конечном итоге пытаюсь заставить мои таблицы динамически изменять размер строки на основе этого текстового поля.)

Ответ 1

Мне нужно было сделать что-то подобное этому в моем текущем проекте. Хитрость заключается в использовании метода sizeWithFont на NSString. Это вернет CGSize, который вы затем можете использовать для создания фрейма с правильным размером, подходящего для вашего текста.

-(void) setCaption: (NSString*) text size:(CGSize) maxSize
{
    [self.label setText:text];
    UIFont* font=[UIFont systemFontOfSize: [UIFont systemFontSize]]
    [[self label] setFont:font];

    CGSize size=[text sizeWithFont:font constrainedToSize:maxSize];  
    label.frame = CGRectMake(0, 0, size.width, size.height);
}

Если у вас нет доступа к представлению, вы можете перевести это в метод вспомогательного класса.