5

我有一个包含按钮和文本视图的视图。单击按钮时,文本视图的隐藏状态将更改并显示在视图上。已配置弹簧和支柱,因此文本视图随视图垂直扩展。这一切都在IB中完成

然后我以编程方式将文本插入到 textview 中,但我需要 textview 显示其所有内容,而无需用户滚动。

这是我用来计算 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;    
}

无论是否在 textview 上调用 -sizeToFit,它都会太大或太小(取决于它的内容)。

我需要显示所有内容的文本视图的高度,以便我可以调整视图的大小。

我知道我可能可以使用 NSTextField 作为标签,但我需要一个 NSTextView 来实现它的附加功能(特别是使用封闭滚动视图的标尺视图)。

有人有什么建议吗?

4

3 回答 3

2

她就是我的做法,而且效果很好:

// 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 使用其容器调整大小。

很明显,对于正确的高度,固定宽度是必要的,因为高度取决于适合线条的内容。

于 2013-04-26T15:01:50.280 回答
2

如果 NSTextView 的字符串超出容器宽度,NSTextView 通常会自行调整大小。我认为这是因为包含的单元格具有文本溢出的默认行为,称为“换行”或其他内容。我的直觉是,您可以在 TextView 加载后询问它的高度并相应地调整包含视图,而无需布局管理器。并且显然确保设置了自动调整大小的掩码(哦,你在 IB 中这样做,所以不用担心)。我可能是错的,我没有做任何测试......但是,你可以试试!:P

于 2011-03-30T00:21:12.937 回答
-1

如果您想完全省略滚动视图(例如,制作一个附加到另一个超级视图并调整自身大小以适合其文本的文本视图),您可以查看 NSText。它是,AFAICT,基本上是一个没有超级视图(滚动视图部分)的 NSTextView,并且可以自动调整自身大小。

于 2011-03-29T07:06:52.507 回答