2010-04-16 7 views
13

Estoy tratando de establecer una cadena atribuida dentro de NSTextView. Quiero aumentar su altura en función de su contenido, inicialmente se establece en un valor predeterminado.¿Cómo cambiar el tamaño de NSTextView según su contenido?

así que he intentado este método:

puse contenido en NSTextView. Cuando establecemos contenido en NSTextView, su tamaño aumenta automáticamente. Así que aumenté la altura de su súper vista que es NSScrollView a su altura, pero NSScrollView no está completamente redimensionado, se muestra la rueda de desplazamiento a la derecha.

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

¿Alguien me puede sugerir alguna forma o método para resolver este problema. Al hacer la búsqueda de google me encontré con que en UITextView hay un método contentSize que puede obtener el tamaño de su contenido, traté de encontrar un método similar en NSTextView pero no pude conseguir ningún éxito :(

+0

solución sugerida por Peter elaboró ​​[aquí] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html) aplausos – Devarshi

Respuesta

15
+0

@ Peter Hosey - ¿Puedes explicar esto con más detalle? Obtuve el rect de layoutmanager .. ahora, ¿qué debo hacer para aumentar la altura de NSTextView? – Saurabh

+0

@Saurabh: aumente el tamaño de la vista de texto, o la vista de desplazamiento que lo contiene, o la vista principal de la vista de desplazamiento, o de la ventana misma por la diferencia entre el tamaño actual de la vista de texto (o, cuando está en una vista de desplazamiento, el tamaño de su rect visible actual) y el tamaño que tomará el texto. –

+0

enlaces @PeterHosey están muertos – 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; 
} 

hice la función usando esta referencia:.. Documentation

Ejemplo:

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