在 NSSplitView 中隐藏分隔线

2023-12-02

Since NSSplitView不允许隐藏其分隔线(委托方法仅允许隐藏位于分割视图边缘的分隔线),我选择子类化NSSplitView并重写其绘制方法以防止绘制特定的分隔线。

但是,一旦我覆盖其中任何一个draw(rect:) or drawDivider(in:) the NSSplitView如果我像这样折叠项目,则不再为其分隔线设置动画

activityItem.animator().isCollapsed = collapsed

如果我打电话甚至会发生这种情况super直接不用添加我自己的绘图代码

override func draw(_ dirtyRect: NSRect) {
    super.draw(dirtyRect)
}

上面的代码足以完全破坏动画。

基本上我想要实现的就是将分割视图项目隐藏在其分隔线旁边,但这显然要求太多了NSSplitView无需完全重新实现它。

我已经压垮了这里的最后一根稻草。还有其他方法可以完成隐藏项目+分隔线吗?


好吧,我走了一条完全不同的路,找到了一种让它发挥作用的方法。因此,如果您想完全自定义分隔线,这就是您的做法。

  1. 子类NSSplitView并返回0 from dividerThickness

因此,您的新分割视图现在根本不会显示分隔线,但您可以手动将它们添加到您想要的位置

  1. Add NSBox或者您希望分隔线显示在分割视图子视图中的自定义分隔线视图,最好显示在子视图的顶部。

  2. 重写分割视图委托方法splitView(:additionalEffectiveRectOfDividerAt:)并手动返回与您的自定义匹配的矩形NSBox分隔线

你可能需要convert(:from:)之间NSView坐标来获得有效的直角,但它有效!代表可能看起来像这样

override func splitView(_ splitView: NSSplitView, additionalEffectiveRectOfDividerAt dividerIndex: Int) -> NSRect {
    let item = splitViewItems[dividerIndex]
    let itemView = item.viewController.view
    let frame = view.convert(itemView.bounds, from: itemView)

    let dividerFrame = CGRect(x: 0,
                              y: view.bounds.height - frame.minY,
                              width: frame.width,
                              height: 1)

    return dividerFrame
}

你有它。自定义分隔线也适用于动画!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 NSSplitView 中隐藏分隔线 的相关文章

随机推荐

  • 如何在没有控制台/本机应用程序交互式登录屏幕的情况下为 Graph API 生成 Azure Active Directory (AAD) 身份验证令牌?

    如何在没有控制台 本机应用程序交互式登录屏幕的情况下为 Graph API 生成 Azure Active Directory AAD 身份验证令牌 细节 我正在使用 Graph API 通过具有 委派 权限的 Azure Active D
  • R 中两个日期之间的总和/计数

    我有一个包含两列的数据框 一列是开始日期 另一列是结束日期 我需要获取一个包含两列的新数据框 一个是 日期 列 另一列是第一个数据框中的观察值计数 其中日期位于 开始 和 结束 之间 Have dates lt data frame Sta
  • Kendo ui 选择器 CSS 问题

    我正在使用 kendo ui 下拉列表和其他一些选择器 我想设置所选项目背景颜色的样式 我尝试过 k dropdown k state selected background color red 但所选项目的颜色没有改变 它仅设置为默认橙色
  • 使用 Application Insights 检测 Windows 服务

    是否可以使用 Application Insights 检测本地运行的 Windows 服务 没有必要像 Web 应用程序那样自动收集应用程序的指标 将自定义事件推送到 Azure 就足够了 我会让文档对此更加清楚 如果有一个核心 SDK
  • 我如何在android中设置自定义日期

    如何将日期设置为当年 25 12 12 月 例如 我正在使用这个代码 public static Calendar defaultCalendar Calendar currentDate Calendar getInstance curr
  • 以编程方式声明任意等级的数组

    在 C 中 数组分为三种类型 一维数组 锯齿形数组和多维矩形数组 问题是 给定一个特定大小的数组 我们如何创建一个具有相同维度和秩的新数组 对于多维矩形数组 似乎没有语法可以在运行时定义大小和等级 维数 C 在索引器中声明带有逗号的多维数组
  • 合并两个数组,同时保留原始数组顺序

    我正在编写一个从外部源 Twitter 请求数据的应用程序 该数据按时间顺序作为有序数组返回 外部阵列 项目 A 最新 Item B Item C 项目 D 最旧的 我将这些项目添加到另一个保留相同顺序的数组中 My array 项目 A
  • Thread.Abort 和替代方案

    这更多是出于个人好奇 兴趣 而不是我试图解决的特定问题 假设您有一个程序正在对用户提供的信息 例如搜索字符串 执行某些操作 这些信息会随着用户键入而更改 假设您想要向用户显示与他们在任何给定时间键入的内容最相关的信息 如果线程确实可以中止
  • PHP 中内爆二维数组

    我有一个像这样的数组 Array 0 gt Array 0 gt a 1 gt b 1 gt Array 0 gt c 2 gt Array 0 gt d 1 gt e 2 gt f 我想将数组转换为如下所示的字符串 arrtostr a
  • Spring Boot 项目设置设计决策

    我们将使用 Spring Boot 来创建服务 我们最初的想法是每个服务 不一定是微服务 都是独立的 并部署为 jar 文件 用于构建的 Maven 我想知道什么是一个好的 Spring Boot 项目结构 因为每个服务都是独立的 但我猜测
  • MS Exchange 服务器的 Grails 邮件插件配置

    我可以使用我的 gmail 帐户从我的 grails 应用程序发送电子邮件 但是当我使用 MS Exchange 服务器帐户时 我收到此错误 Message Mail server connection failed nested exce
  • 如果再次调用函数,则取消超时/计时器 --- debounce 函数

    我想创建一个启动超时的函数 但如果在计时器结束之前再次调用该函数 请取消原始调用并再次启动计时器 我想我可以这样做 function setTimer setTimeout gt do something 3000 但这不起作用 每次我运行
  • Ruby Regex 用于捕获两个字符串之间的所有内容(包括)

    我正在尝试清理一些 HTML 并仅删除一个标签 我真的很想避免使用 nokogiri 等 所以我出现了以下字符串 我想删除它 div class lt div gt m这有效 但它也会匹配并包括任何进一步的 div 文档中的标签 这是我不想
  • PySpark:如何转置数据框中的多列

    我是 Spark 新手 需要帮助将以下输入数据帧转换为所需的输出df 行到列 使用 PySpark 或 Spark Sql 输入数据框 A B C D 1 2 3 4 10 11 12 13 所需的输出 转置 数据 A 1 B 2 C 3
  • 为什么我看到的线程数比我在“ps”列表中创建的线程数多了一个?

    当我创建一个线程时 pthread create 从我的主进程中 我看到三 3 个线程ps上市了 这是为什么呢 也就是说 我看到主线程的进程 一个用于创建的线程 第三个用于其他线程 还有什么东西 一切工作正常 我只是想知道额外列出的过程是什
  • 使用 std::ios::sync_with_stdio(false) 可以比 scanf 和 printf 更快吗?

    我只知道使用 cin 和 cout 会比 scanf 和 printf 慢 然而 最佳答案说使用 std ios sync with stdio false 可以比 scanf printf 更快 然而我做了这个实验 发现不对 是我的错吗
  • 在最后一个窗口上调用 dispose 后,java swing 程序未关闭

    前言 这是我做的第一个真正的挥杆项目 我有一个 swing 程序 其中一个 JButton 应该退出该程序 该按钮会触发 this dispose 当我点击这个 JButton 时 它does使窗口完全消失 但查看调试器 程序本身仍在运行
  • 从 git status bash 输出创建字符串数组

    我正在尝试创建修改后的 git 文件的字符串数组 以便我可以在 bash 程序中使用它们 示例输出 On branch restructured Your branch is up to date with origin restructu
  • 如何使用 React Navigation v5 保留带有嵌套导航的初始路线?

    首先让我声明我知道如何使用反应导航从一个嵌套页面导航到另一个嵌套页面 但是 每当我导航到不是初始路线的嵌套屏幕时 每当我导航回该嵌套堆栈时 该屏幕就会成为第一个屏幕 Example Parent Navigator Nested Stack
  • 在 NSSplitView 中隐藏分隔线

    Since NSSplitView不允许隐藏其分隔线 委托方法仅允许隐藏位于分割视图边缘的分隔线 我选择子类化NSSplitView并重写其绘制方法以防止绘制特定的分隔线 但是 一旦我覆盖其中任何一个draw rect or drawDiv