Objective c 侧边栏演示-替换子视图

Objective c 侧边栏演示-替换子视图,objective-c,macos,nsview,nssplitview,Objective C,Macos,Nsview,Nssplitview,我有一个NSSplitView和分隔器样式设置为瘦,它看起来很棒。 但是,如果我用这行代码替换其中一个子视图 [self.horizontalSplitView replaceSubview:[[self.horizontalSplitView subviews] objectAtIndex:0] with:myGreatView]; 分隔器看起来有点糟糕,如何解决此问题 问题是您的视图(myGreatView)有边框。将边框类型设置为NSNoBorder [myGreatView setB

我有一个NSSplitView和分隔器样式设置为瘦,它看起来很棒。

但是,如果我用这行代码替换其中一个子视图

[self.horizontalSplitView replaceSubview:[[self.horizontalSplitView subviews] objectAtIndex:0] with:myGreatView];
分隔器看起来有点糟糕,如何解决此问题


问题是您的视图(
myGreatView
)有边框。将边框类型设置为
NSNoBorder

[myGreatView setBorderType:NSNoBorder];

在XCode中设置一个调试断点,或者在更改前后记录左列视图的frame rect-观察交换前后的帧是否相同。替换视图是否与它要替换的类相同?帧不同,但即使我在替换子视图之前设置了帧
NSRect prevFrame=[[self.horizontalplitview.subviews objectAtIndex:0]Frame];self.sideBarViewController.view.frame=prevFrame它没有帮助。它本身不是同一个类,它是NSVIEW的一个子类。需要检查的是autoLayout属性。如果框架不同,很明显这是一个布局问题——如果你知道你正确地设置了框架,那么很明显其他人不这么认为(超出了范围)。例如,如果原始视图和要将其替换为的视图具有不同的AutoLayoutMask,则当superview尝试根据其各自的定位和大小调整特征布局视图时,您可能会看到这种行为。autoLayout为trun off,autoresizingMask为相同。