当放置在 NSWindow 的顶部附近时,NSTextView 不起作用

NSTextView doesn’t work when placed near the top of an NSWindow

上下文

我有一个 window 和一个 fullSizeContentView 以及一个透明的标题栏和一个隐藏的标题栏。 我什至不想要标题栏,但我必须让它在 NSWindow.

上得到圆角

问题

一个 NSTextView,当放置在顶部边缘附近时,不会对 任何 点击做出反应。它不允许我 select 任何文本,也不允许我单击 link 我通过 NSAttributedString 添加的内容。

当我完全禁用标题栏时,这个问题就消失了。

任何帮助将不胜感激。谢谢!


大背景

我正在尝试实现显示外围设备状态更新的小“in-app 通知”。我考虑过使用 NSAlert 但我不想阻止用户在显示通知时与界面的其余部分进行交互,所以我决定自己实现它。

通知很少,non-movable windows 没有标题栏。它们基本上只是带有圆角的灰色矩形和在主应用程序 window 内部绘制的阴影,并包含一行或几行文本。第一行文本几乎完全在不可见的标题栏后面,这就是我遇到问题的原因。

除了显示文本外,我唯一需要通知做的事情是 link 到包含有关通知消息的更多信息的网页。

我觉得我可能处理错了。如果您对如何解决问题有任何建议或想法,我很想听听。谢谢!

我终于明白了!

我把它钉在 NSScrollViewcontentInsets 上。 (由于某种原因,在 Interface Builder 中创建它时,您被迫在 NSTextView 周围使用它)
contentInsets 被自动设置为说明不可见的标题栏,即使文档说 NSScrollView - automaticallyAdjustsContentInsets(默认设置为 YES,我认为这是造成这种情况的原因)不执行自动插入用于透明标题栏。

以编程方式将 scrollView 的 contentInsets 设置为 0 后,一切正常! 在 Objective C 中,您可以像这样将 scrollView 的 contentInsets 设置为 0:

NSScrollView *scrollView = (NSScrollView *)self.textView.superview.superview;
scrollView.automaticallyAdjustsContentInsets = NO; // Doesn't remove insets // Probably calling this too late
scrollView.contentInsets = NSEdgeInsetsMake(0, 0, 0, 0);

Here 是一个工作示例。

希望对您有所帮助!