微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当放置在 NSWindow 顶部附近时 NSTextView 不起作用

背景

我有一个带有 fullSizeContentView 和透明标题栏和隐藏标题栏的窗口。 我什至不想要标题栏,但我必须启用它才能在 NSWindow 上获得圆角。

问题

NSTextView,当放置在顶部边缘附近时,不会对任何点击做出反应。它不允许我选择任何文本,也不允许我点击通过 NSAttributedString 添加链接

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

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


大背景

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

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

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

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

解决方法

我终于明白了!

我把它钉在了 contentInsetsNSScrollView 上。 (在 Interface Builder 中创建 NSTextView 时,您出于某种原因被迫将其放在您的 contentInsets 周围)
NSScrollView - automaticallyAdjustsContentInsets 被自动设置为考虑不可见的标题栏,即使文档说 contentInsets(默认情况下设置为 YES,我认为是导致此问题)不会自动插入用于透明标题栏。

以编程方式将 scrollView 的 contentInsets 设置为 0 后,一切正常! 在目标 C 中,您可以像这样将 scrollView 的 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:

                            <li style="margin-bottom: 14px;">
                                <label><?=__($labelConfirm);?> 
                                <input type="email" name="confirmEmail" required="" oninvalid="this.setCustomValidity('<?=__($emailCompareMsg);?>')" oninput="this.setCustomValidity('')"
                                value="<?php if(isset($_POST['confirmEmail'])) echo $_POST['confirmEmail'];?>" class="required requiredField" size="16" style="padding: 5px 7px">
                                </label>
</li>

Here 是一个工作示例。

希望这会有所帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。