2010-11-04 2 views
4

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

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

Это код, я использую, чтобы вычислить высоту текста в TextView:

- (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 на TextView, это будет либо слишком большим или слишком маленьким (в зависимости от его содержимого).

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

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

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

ответ

-1

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

2

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

1

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

// 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 изменяет размер с помощью контейнера.

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

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