【问题标题】:Getting NSTextView to perfectly fit its contents让 NSTextView 完全适合其内容
【发布时间】:2010-11-04 16:50:15
【问题描述】:

我有一个包含按钮和文本视图的视图。单击按钮时,文本视图的隐藏状态将更改并显示在视图上。已配置弹簧和支柱,因此文本视图随视图垂直扩展。这一切都在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,它都会太大或太小(取决于其内容)。

我需要获取显示所有内容的 textview 的高度,以便调整视图的大小。

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

有人有什么建议吗?

【问题讨论】:

    标签: objective-c cocoa nsview nstextview


    【解决方案1】:

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

    【讨论】:

      【解决方案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 使用其容器调整大小。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-19
          • 2011-06-11
          • 1970-01-01
          相关资源
          最近更新 更多