如何根据内容调整NSTextView的大小?

Mir*_*aaj 19 cocoa 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)]; 
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我一些方法或方法来解决这个问题.通过谷歌搜索,我发现在UITextView中有contentSize方法可以获得其内容的大小,我试图在NSTextView中找到类似的方法,但无法取得任何成功:(

Pet*_*sey 16

问文本视图其布局管理器它的文本容器.然后,强制布局管理器执行布局,然后向布局管理器询问文本容器使用的矩形.

另请参见文本系统概述.

  • @PeterHosey链接已经死了 (6认同)
  • 我建议编辑帖子以添加实际内容,而不仅仅是链接。 (4认同)

hyo*_*uuu 9

基于@Peter Hosey 的回答,这里是 Swift 4.2 中 NSTextView 的扩展:

extension NSTextView {

    var contentSize: CGSize {
        get {
            guard let layoutManager = layoutManager, let textContainer = textContainer else {
                print("textView no layoutManager or textContainer")
                return .zero
            }

            layoutManager.ensureLayout(for: textContainer)
            return layoutManager.usedRect(for: textContainer).size
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*ell 6

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];
Run Code Online (Sandbox Code Playgroud)