使用Xcode 6的OSX 10.10中的NSSplitViewController

时间:2014-11-17 21:54:35

标签: objective-c xcode nssplitview

根据NSSplitViewControllers上的文档,关联的NSSplitView使用NSSplitViewController作为其委托。特别是在文档中,“拆分视图控制器充当其拆分视图对象(管理分隔符的对象)的委托。如果覆盖拆分视图委托方法,则覆盖必须调用super。”

我在界面构建器中实现了一个NSSplitViewController并为它提供了一个类。但是,没有调用任何splitView委托。另外,如果我只是像spit那样执行splitView委托[NSLog(@“%@”,self.splitView.delegate); ],结果为“null”。但是,如果我在IB本身(通过将委托出口拖动到NSSplitViewController)或内部代码([self.splitView setDelegate:self];)中分配委托,我会收到以下错误:

  

提出了一个未被捕获的例外   SplitViewController的splitView无法使用autolayout,因为SplitViewController会覆盖不兼容的委托方法。

我完全陷入了困境。

2 个答案:

答案 0 :(得分:18)

如果拆分视图的委托实现了以下方法之一,则它将与自动布局不兼容。

splitView:constrainMinCoordinate:ofSubviewAt:
splitView:constrainMaxCoordinate:ofSubviewAt:
splitView:resizeSubviewsWithOldSize:
splitView:shouldAdjustSizeOfSubview:

https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKitOlderNotes/#10_8AutoLayout


由于NSSplitViewController需要使用自动布局(在文档中提到),因此这些方法与NSSplitViewController不兼容,不应在子类中实现。

答案 1 :(得分:0)

扩展泰勒的答案。

在macOS 10.8中,Apple对NSSplitview进行了改进,其中包括遵守子视图的约束。苹果还为NSSplitview的子视图引入了保留优先权。保持优先级是保持子视图大小的优先级,因此在调整分割视图的大小时,优先级最低的子视图将首先调整大小。

因此,要控制调整大小的行为,您必须调整SplitView项的保留优先级。这也可以直接在情节提要中完成