gpt4 book ai didi

macos - 使用三个 subview 配置 NSSplitView,例如 mail.app

转载 作者:行者123 更新时间:2023-12-04 18:09:36 24 4
gpt4 key购买 nike

是否可以像 mail.app 一样通过自动布局约束配置 splitview 有 3 个 subview ?我的意思是:当用户调整窗口大小时,只有最右边的 subview 改变它的大小,当用户拖动最左边和中间 subview 之间的分隔线时,只有左边和右边的 subview 改变它的大小,当用户拖动中间和中间的分隔线时正确的 subview 只有这些 subview 改变大小。如果可以怎么办。我认为这个任务可以通过约束优先级来执行,但我对此感到困惑。谢谢!

最佳答案

我找到了一个不使用自动布局约束的解决方案。我正在使用 Rubymotion,所以我的解决方案是用 Ruby 编写的,但它可以很容易地转换为 Objective-C。

首先,当用户拖动左侧和中间 subview 之间的分隔线时,为了仅让左侧和右侧 subview 改变它们的大小,我创建了两个嵌套的 NSSplitView,第二个嵌套在右侧第一个的一部分。

问题中提到的最后一点,也就是说 当用户拖动中间和右侧 subview 之间的分隔线时,只有这些 subview 改变大小NSSplitView 的默认行为 所以这里没什么可做的。

最后,为了让最右边的 subview 在用户调整窗口大小时改变其大小,我实现了 splitView:resizeSubviewsWithOldSize: 委托(delegate)方法:

def splitView(splitView, resizeSubviewsWithOldSize:oldSize)
sv1 = splitView.subviews[0]
sv2 = splitView.subviews[1]

leftFrame = sv1.frame
rightFrame = sv2.frame
newFrame = splitView.frame

leftFrame.size.height = newFrame.size.height
rightFrame.size.height = newFrame.size.height

leftFrame.origin = NSMakePoint(0,0)
## 1 is the NSSplitView divider width
rightFrame.size.width = newFrame.size.width - leftFrame.size.width - 1
rightFrame.origin.x = leftFrame.size.width + 1

sv1.setFrame(leftFrame)
sv2.setFrame(rightFrame)
end

瞧!我花了一些时间才让它发挥作用,所以我希望它能为其他人节省一些时间。

关于macos - 使用三个 subview 配置 NSSplitView,例如 mail.app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17541966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com