NSSplitView的状态不一致

时间:2013-04-28 20:16:12

标签: objective-c xcode cocoa nssplitview

我正在玩NSSplitView - 现在非常成功,但这是我的问题:

我的SplitView看起来像这样: SplitView

在此测试项目:https://www.dropbox.com/s/amz863l11nvkdir/TestNSSplitView.zip

我已经实施了- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize,以便在调整大小时将左侧和右侧子视图保持与之前相同的大小。

如果我打开包含NSSplitView的窗口,则会在控制台中显示此消息:

<NSSplitView: 0x107de1520>: the delegate <BRSchematicWindowController: 0x10ac11050> was sent -splitView:resizeSubviewsWithOldSize: and left the subview frames in an inconsistent state:
Split view bounds: {{0, 0}, {1068, 600}}
     Subview frame: {{0, 0}, {182, 600}}
     Subview frame: {{183, 0}, {640, 600}}
     Subview frame: {{824, 0}, {243, 600}}
The outer edges of the subview frames are supposed to line up with the split view's bounds' edges. NSSplitView is working around the problem, perhaps at the cost of more redrawing. (This message is only logged once per NSSplitView.)

这里有什么问题?阅读此消息后,我甚至没有得到它......

PS:在右侧的splitView中有另一个NSSplitView,这不是失败。即使没有这个额外的NSSplitView,我也会收到此消息。

1 个答案:

答案 0 :(得分:8)

如果您的目标是OS X 10.6 +,那么使用NSSplitView的{​​{3}}来控制大小调整会更容易。

使用此方法的一种方法是将以下IBOutlet添加到.h文件中:

@property (nonatomic, weak) IBOutlet NSView *leftView;
@property (nonatomic, weak) IBOutlet NSView *centerView;
@property (nonatomic, weak) IBOutlet NSView *rightView;

然后在.m文件中实现splitView:shouldAdjustSizeOfSubview:,如下所示:

- (BOOL)splitView:(NSSplitView *)aSplitView
             shouldAdjustSizeOfSubview:(NSView *)subview {
    return (subview == _centerView);
    // or return !(subview == _leftView || subview == _rightView);
}

通过实现它,你基本上说“只调整中心子视图的大小”。

您可以暂时注释掉整个splitView:resizeSubviewsWithOldSize:方法,除非您需要以某种方式自定义默认行为。

请注意,如果您有多个拆分视图将此控制器对象设置为其委托,您可能需要检查aSplitView参数中传递的拆分视图,并相应地执行不同的操作。