2010-04-16 5 views
13

Sto cercando di impostare una stringa attribuita all'interno di NSTextView. Voglio aumentare la sua altezza in base al suo contenuto, inizialmente è impostato su un valore predefinito.Come ridimensionare NSTextView in base al suo contenuto?

Così ho provato questo metodo:

ho impostato contenuti in NSTextView. Quando impostiamo del contenuto in NSTextView, le sue dimensioni aumentano automaticamente. Così ho aumentato l'altezza della sua super vista che è NSScrollView all'altezza, ma NSScrollView non viene completamente ridimensionato, mostra uno scroller sulla destra.

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)]; 

Qualcuno può suggerirmi qualche modo o metodo per risolvere questo problema. Facendo ricerca google ho trovato che in UITextView c'è metodo contentSize che può avere dimensioni del suo contenuto, ho cercato di trovare metodo simile a NSTextView, ma non ha potuto ottenere alcun successo :(

+0

soluzione suggerita da Peter elaborato [qui] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html) evviva – Devarshi

risposta

15
+0

@Peter Hosey - Puoi spiegarlo più dettagliatamente? Ho preso il rect da layoutmanager .. ora cosa dovrei fare per aumentare l'altezza di NSTextView? – Saurabh

+0

@Saurabh: aumenta la dimensione della vista del testo, o della vista di scorrimento che la contiene, o la vista genitore della vista di scorrimento, o della finestra stessa per la differenza tra la dimensione corrente della vista del testo (o, quando è in una scorri la vista, la dimensione del suo rect visibile corrente) e la dimensione che il testo effettivamente occuperà. –

+0

I link @PeterHosey sono morti – 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; 
} 

ho fatto la funzione che utilizza questo riferimento:.. Documentation

Esempio:

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];