2010-04-16 3 views
13

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

Так что я попробовал этот метод:

я установить содержание в NSTextView. Когда мы устанавливаем некоторый контент в NSTextView, его размер автоматически увеличивается. Таким образом, я увеличил высоту своего супер-представления, что соответствует NSScrollView, но NSScrollView не получает полного изменения размера, он показывает скроллер справа.

float xCoordinate = 15.0; 

[xContentViewScroller setFrame:NSMakeRect(xCoordinate, 0.0, 560.0, 10.0)]; 

[[xContentView textStorage] setAttributedString:xContents]; 

float xContentViewScrollerHeight = [xfContentView frame].size.height + 2; 

[xContentViewScroller setFrame:NSMakeRect(xCoordinate, 0.0, 560.0, xContentViewScrollerHeight)]; 

Может кто-нибудь предложить мне каким-либо способом или способом решить эту проблему. Делая поиск Google, я обнаружил, что в UITextView есть метод contentSize который может получить размер его содержания, я пытался найти подобный метод в NSTextView, но не мог получить какой-либо успех :(

+0

Решение предложил Питер подробно [здесь] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html) cheers – Devarshi

ответ

15
+0

@Peter Hosey - Можете ли вы объяснить это более подробно? Я получил исправление от layoutmanager. Теперь что мне делать, чтобы увеличить высоту NSTextView? – Saurabh

+0

@Saurabh: Увеличьте размер текстового вида или его прокрутки, или его родительское представление в виде прокрутки, или самого окна по разнице между текущим размером текстового вида (или, когда он находится в просмотр прокрутки, размер текущего видимого прямоугольника) и размер текста, который фактически будет занимать. –

+0

@PeterHosey ссылки мертвы – Cfr

2
NSTextView *textView = [[NSTextView alloc] init]; 
textView.font = [NSFont systemFontOfSize:[NSFont systemFontSize]]; 
textView.string = @"Lorem ipsum"; 

[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer]; 

textView.frame = [textView.layoutManager usedRectForTextContainer:textView.textContainer]; 
0
+ (float)heightForString:(NSString *)myString font:(NSFont *)myFont andWidth:(float)myWidth andPadding:(float)padding { 
    NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:myString]; 
    NSTextContainer *textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(myWidth, FLT_MAX)]; 
    NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init]; 
    [layoutManager addTextContainer:textContainer]; 
    [textStorage addLayoutManager:layoutManager]; 
    [textStorage addAttribute:NSFontAttributeName value:myFont 
        range:NSMakeRange(0, textStorage.length)]; 
    textContainer.lineFragmentPadding = padding; 

    (void) [layoutManager glyphRangeForTextContainer:textContainer]; 
    return [layoutManager usedRectForTextContainer:textContainer].size.height; 
} 

Я сделал функцию, используя эту ссылку:.. Documentation

Пример:

float width = textView.frame.size.width - 2 * textView.textContainerInset.width; 
float proposedHeight = [Utils heightForString:textView.string font:textView.font andWidth:width 
            andPadding:textView.textContainer.lineFragmentPadding]; 
Смежные вопросы