根据NSSplitViewControllers上的文档,关联的NSSplitView使用NSSplitViewController作为其委托。特别是在文档中,“拆分视图控制器充当其拆分视图对象(管理分隔符的对象)的委托。如果覆盖拆分视图委托方法,则覆盖必须调用super。”
我在界面构建器中实现了一个NSSplitViewController并为它提供了一个类。但是,没有调用任何splitView委托。另外,如果我只是像spit那样执行splitView委托[NSLog(@“%@”,self.splitView.delegate); ],结果为“null”。但是,如果我在IB本身(通过将委托出口拖动到NSSplitViewController)或内部代码([self.splitView setDelegate:self];)中分配委托,我会收到以下错误:
提出了一个未被捕获的例外 SplitViewController的splitView无法使用autolayout,因为SplitViewController会覆盖不兼容的委托方法。
我完全陷入了困境。
答案 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项的保留优先级。这也可以直接在情节提要中完成