我有一个带有两个水平子视图的NSSplitView。左边是NSOutlineView,右边是NSTableView。左视图对宽度有两个约束: 1) >= 150和2) <= 200。所以我有一个最小宽度和一个最大宽度。
在func splitView(splitView: NSSplitView, canCollapseSubview subview: NSView) -> Bool {中,我为左子视图返回true。这是可行的,但是完全隐藏了左视图(正如它应该做的那样)。
我的目标是,与通常的方式不同,左视图只会折叠到,比如说50px。有什么方法可以让我达到这个目的吗?我想过要写点什么。在func splitView(splitView: NSSplitView, resizeSubviewsWithOldSize oldSize: NSSize)中,但这不是使用自动布局的正确方式(我尝试过,但设置子视图的框架会在每次更改拆分视图分隔符时重新加载NSTableView (这会导致表视图丢失所有选择))。
发布于 2015-07-06 01:41:49
首先,无论您想将该行为称为什么,它都不是Cocoa所说的折叠子视图。所以,不要再从崩溃的角度思考了。
其次,您不能指定最小宽度约束,然后期望系统忽略它。如果您希望视图有时只有50点宽,则不能将其限制为>= 150点。
您可以尝试实现委托方法splitView(_:constrainSplitPosition:ofSubviewAt:),使分隔线位置“捕捉”到150点的限制和50点的限制。也就是说,它可以允许任何位置>= 150点。对于100到150点之间的位置,它会将其调整为150点。对于低于100点的位置,它会将其调整为50点。
https://stackoverflow.com/questions/31230069
复制相似问题