gpt4 book ai didi

objective-c - NSSplitView 的不一致状态

转载 作者:太空狗 更新时间:2023-10-30 04:00:10 33 4
gpt4 key购买 nike

我正在玩 NSSplitView - 目前相当成功,但这是我的问题:

我的 SplitView 看起来像这样: SplitView

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

我已经实现了 - (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize 以在调整大小时将左右 subview 保持与之前相同的大小。

如果我打开包含 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,我也会收到这条消息。

最佳答案

如果您的目标是 OS X 10.6+,那么使用 NSSplitViewsplitView:shouldAdjustSizeOfSubview: 会容易得多控制大小。

使用此方法的一种方法是将以下 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);
}

通过实现它,您基本上就是在说“调整大小时只调整中心 subview 的大小”。

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

请注意,如果您有多个将此 Controller 对象设置为它们的委托(delegate)的 Split View,您可能需要检查在 aSplitView 参数中传递了哪个 Split View并执行不同的操作因此。

关于objective-c - NSSplitView 的不一致状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267363/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com