首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSplitView中的隐藏分频器

NSSplitView中的隐藏分频器
EN

Stack Overflow用户
提问于 2020-02-11 09:15:53
回答 1查看 229关注 0票数 1

由于NSSplitView不允许隐藏其分隔符(委托方法只允许隐藏位于拆分视图边缘的分隔符),所以我选择了子类NSSplitView并重写其绘制方法,以防止特定的分隔符绘制。

但是,当我覆盖draw(rect:)drawDivider(in:)时,如果我折叠一个像这样的项目,NSSplitView就不再激活它的分隔器了。

代码语言:javascript
复制
activityItem.animator().isCollapsed = collapsed

如果我直接调用super而不添加自己的绘图代码,甚至会发生这种情况。

代码语言:javascript
复制
override func draw(_ dirtyRect: NSRect) {
    super.draw(dirtyRect)
}

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

基本上,我想要实现的只是在分隔器旁边隐藏一个拆分视图项,但这显然要求NSSplitView不完全重新实现它。

我在这里最后一根稻草了。还有其他方法来完成隐藏项+除法器吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-11 09:59:45

好吧,我走了一条完全不同的路,找到了一种让它运转的方法。因此,如果您试图完全自定义分配器,这是您如何做到这一点。

dividerThickness

  1. 子类NSSplitView和返回0

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

subview.

  • Override
  1. 添加NSBox或自定义分隔器视图,其中您希望分隔器显示在拆分视图子视图中,更好地位于视图委托方法splitView(:additionalEffectiveRectOfDividerAt:)的顶部,并手动返回与自定义NSBox分隔符匹配的rects。

您可能需要convert(:from:)之间的NSView坐标,以获得您的有效rects,但它的工作!代表可能看起来像这样

代码语言:javascript
复制
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
}

给你拿着。自定义分隔器,也工作与动画!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60165351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档