NSSplitView:分割器厚度在视网膜屏幕上拖动时发生变化

时间:2015-02-21 01:25:25

标签: objective-c macos cocoa nsview nssplitview

上下文

我的应用中有一个NSSplitView,有3个窗格。我已经将NSSplitView子类化,并且它有一个覆盖:

-(CGFloat) dividerThickness { return 1.0f; }

我已禁用限制分割器最小/最大点数和调整子视图等的所有委托方法。


问题

当我在视网膜屏幕上拖动任何分隔线 时,分隔线的厚度在拖动过程中会波动。观看此视频:http://incident57.com/divider.mp4

无论我使用什么分隔器厚度都会发生这种情况---在拖动过程中厚度总是变化约1px。

非视网膜屏幕上的不会发生。当窗口本身调整大小时,它也不会发生。分割器宽度仅在拖动分隔器时波动。

(如果你仔细观察,你可以看到在视图之间有一些空白的空白区域,看起来NSSplitView 应该正在绘制分隔符,但是并非如此。 t。查看视频中褐色选定表格行的结尾。)


我需要什么

如何解决这个问题,以便在视网膜屏幕拖动时分隔宽度保持不变?

2 个答案:

答案 0 :(得分:3)

我通过实现这个NSSplitViewDelegate方法解决了这个问题:

- (CGFloat) splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex
{
    return floor(proposedPosition);
}

还值得指出的是,只有NSSplitView窗格中的子视图是NSScrollViews时才会出现此问题。窗格内的正常NSView不会导致分隔宽度波动。

答案 1 :(得分:0)

对分割视图进行分层支持(即[splitView setWantsLayer:YES])也应该解决此问题。 由于滚动视图通常会自动进行自动分层,因此当非点对齐时,它们的图层会与绘制的分割视图分割器重叠。