【问题标题】:Padding around an NSTextView in an NSScrollView在 NSScrollView 中填充 NSTextView
【发布时间】:2023-03-12 02:37:01
【问题描述】:

我想在 NSScrollView 内的 NSTextView 周围提供几个像素的填充。我已经查看了this post 并使用 setTextContainerInset 来处理左右边距和底部边距。但是一旦文本滚动,顶部缓冲区就会丢失。与覆盖 textContainerOrigin 相同。该帖子中的另一个答案指出:

TextEdit 执行此操作的方式(在 Wrap to Page 模式下)是将文本视图放在较大的视图中,并将该较大的视图设置为滚动视图的文档视图。

但如果我这样做(例如使用 NSBox),内容将不再滚动。我是否遗漏了有关该特定技巧的某些内容,还是人们可以建议其他任何技巧?

【问题讨论】:

  • 我想换一种方式——删除 NSTextView 的填充。

标签: cocoa nstextview nsscrollview


【解决方案1】:

您的报价中似乎缺少一个步骤。您需要确保您的新文档视图跟踪文本视图框架和大小本身的变化以适应。您可以使用 -setPostsFrameChangedNotifications: 在您的文本视图上打开 NSViewFrameDidChangeNotification,然后让您的新文档视图监听来自您的文本视图的通知..

【讨论】:

  • 感谢您的快速回复。但是一旦我收到一个 NSViewFrameDidChangeNotification 让我知道内部文本视图想要滚动,我该如何告诉外部滚动视图?
  • 使用 NSTextView 的 -scrollRangeToVisible:(继承自 NSText)并传入文本视图的 -selectedRange(可以包含零长度插入点)。
  • 再次感谢您的持续回复,但如果我使用 scrollRangeToVisible(在我的文本实际所在的最内层文本视图上)似乎什么也没有发生。我正在使用: r = NSMakeRange ([[textView string] length], 0); [textView scrollRangeToVisible: r];但我想我在这里遗漏了一些更基本的东西。在我的滚动视图和我的文本视图之间有一个 NSBox,这两者之间的所有“联系”不会被打破吗?例如ScrollView 怎么知道什么时候出现垂直滚动条?当我使用滚动器时,文本视图如何知道它需要滚动?以此类推。
  • 再次阅读我的评论。您想传递文本视图的选定范围,而不是包含整个文本正文的范围。至于滚动视图如何决定如何工作,这在概念文档中有详细介绍。
  • 谢谢,我确实错过了。但是,我真正的问题是我没有手动调整 NSBox 的大小(就像你说的那样)。一旦我这样做了,滚动条就会正常工作。我现在的大问题是弄清楚 NSBox 应该是正确的大小。我认为 NSBox sizetoFit: 可以解决问题,有时这适用于发生的第一行滚动。然后它很快变成“关闭”,底行字符在窗口的一半之外,顶部没有缓冲区。如果您在这里有任何建议,或者可以指出我应该阅读的一些文档的方向,我将不胜感激。
【解决方案2】:

顺便说一句,我最终通过继承 NSClipView、覆盖 setFrame:、setFrameOrigin: 和 setFrameSize,并修改这些方法中的原点和宽度来添加我的填充来完成此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2015-11-19
    • 2014-09-08
    • 2019-05-02
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    相关资源
    最近更新 更多