Получение NSTextView, чтобы идеально соответствовать его содержанию - PullRequest
5 голосов
/ 04 ноября 2010

У меня есть представление, которое содержит кнопку и текстовое представление.Когда кнопка нажата, скрытый статус текстового представления изменится и будет показан на виде.Пружины и распорки были настроены таким образом, чтобы текстовое представление расширялось вертикально вместе с представлением.Все это делается в IB

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

Это код, который я использую для вычисления высоты текста в текстовом представлении:

- (float) getTextViewHeight {

    //based on http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html%23//apple_ref/doc/uid/20001809-CJBGBIBB

    [textview.textContainer setLineFragmentPadding:0.0];
    [textview.layoutManager glyphRangeForTextContainer:textview.textContainer]; 

    return [textview.layoutManager usedRectForTextContainer:self.interactionData.textContainer].size.height;    
}

С или без этого вызова -sizeToFit для текстового представления он будет слишком большимили слишком маленький (в зависимости от его содержимого).

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

Я знаю, что, вероятно, мог бы использоватьNSTextField в качестве метки, но мне нужен NSTextView для его дополнительной функциональности (в частности, с помощью представления линейки scrollview).

У кого-нибудь есть какие-либо предложения?

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

NSTextView обычно меняет свой размер, если его строка превышает ширину контейнера. Я думаю, это потому, что содержащаяся ячейка имеет поведение по умолчанию для переполнения текста, называемое "перенос строки" или что-то в этом роде У меня такое чувство, что вы можете просто запросить у TextView его высоту после загрузки и настроить соответствующий вид, и все это без необходимости в менеджере компоновки. И, очевидно, убедитесь, что маска автоматического изменения размера установлена ​​(о, вы делаете это в IB, так что не беспокойтесь там). Я могу ошибаться, и я не делал никаких тестов ... но да, вы можете попробовать это! : P

1 голос
/ 26 апреля 2013

Ей, как я это делаю, и она хорошо работает:

// Help text.
NSBundle* mainBundle = [NSBundle mainBundle];
NSString* path = [mainBundle pathForResource: @"category-analysis-help" ofType: @"rtf"];
NSAttributedString* text = [[NSAttributedString alloc] initWithPath: path documentAttributes: NULL];
[helpText setAttributedStringValue: text];
NSRect bounds = [text boundingRectWithSize: NSMakeSize(helpText.bounds.size.width, 0) options: NSStringDrawingUsesLineFragmentOrigin];
helpContentView.frame = NSMakeRect(0, 0, helpText.bounds.size.width + 20, bounds.size.height + 20);

helpContentView - это просто контейнер для helpText для добавления полей вокруг текста. helpText изменяет размер в своем контейнере.

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

0 голосов
/ 29 марта 2011

Если вы хотите полностью опустить представление прокрутки (например, создать текстовое представление, которое присоединено к другому суперпредставлению и само изменяет размеры в соответствии с его текстом), вы можете взглянуть на NSText. Это, AFAICT, в основном NSTextView без суперпредставления (части просмотра с прокруткой) и может автоматически изменять свой размер.

...