可以像在mail.app中一样,通过自动布局约束来配置3个子视图吗?我的意思是:当用户只调整窗口最右边的子视图的大小时,当用户拖动最左边和中间的子视图之间的分隔线时,只有左边和右边的子视图改变它的大小,当用户拖动中间和右边的子视图之间的分隔线时,只有这些子视图改变大小。如果可能的话,应该怎么做。我认为这项任务可以通过约束优先级来执行,但我对此感到困惑。谢谢!
发布于 2013-09-19 21:46:00
我找到了一个不使用自动布局约束的解决方案。我正在使用Rubymotion,所以我的解决方案是用Ruby编写的,但它可以很容易地翻译成Objective-C。
首先,为了在用户拖动左子视图和中间子视图之间的分隔符时仅更改左子视图和右子视图的大小,我创建了两个嵌套的NSSplitView,第二个放在第一个的右侧。
问题中提到的最后一点,也就是说when the user drags the divider between the middle and the right subviews only these subviews change size是NSSplitView的默认行为,所以这里不做任何事情。
最后,为了在用户调整窗口大小时仅让最右侧的子视图更改其大小,我实现了splitView:resizeSubviewsWithOldSize:委托方法:
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就是这样!我花了一段时间才让它工作,所以我希望它能为其他人节省一些时间。
发布于 2013-09-19 21:52:14
使用自动布局,您可以设置NSSplitView中每个分隔符的保持优先级。您可以在代码中使用委托方法或在Xcode中的接口构建器中执行此操作。
https://stackoverflow.com/questions/17541966
复制相似问题