语境

我的应用程序中有一个3个窗格的NSSplitView。我将NSSplitView分为子类,它具有一个替代:

-(CGFloat) dividerThickness { return 1.0f; }


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



问题

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

无论我使用哪种分隔线厚度,都会发生这种情况-在拖动过程中,厚度始终变化约1像素。

在非视网膜屏幕上不会发生这种情况。调整窗口本身的大小时也不会发生。仅当拖动分隔线本身时,分隔线宽度才会波动。

(如果您仔细观察的话,您会发现视图之间存在一些空白区域,看起来像NSSplitView应该在绘制分隔线,但实际上并非如此。请看视频中棕色选定表格行的末尾。 )



我需要的

如何解决此问题,以便在视网膜屏幕上拖动时分隔线宽度保持恒定?

最佳答案

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

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


还值得指出的是,仅当NSSplitView窗格内的子视图为NSScrollViews时,此问题才会显现。窗格内的普通NSViews不会导致分隔线宽度波动。

关于objective-c - NSSplitView:在视网膜屏幕上拖动期间分隔线的厚度发生变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28640970/

10-10 13:52