Objective c NSSplitView:在视网膜屏幕上拖动期间分隔器厚度发生变化 上下文
我的应用程序中有一个NSSplitView,它有3个窗格。我对NSSplitView进行了子类化,它有一个覆盖:Objective c NSSplitView:在视网膜屏幕上拖动期间分隔器厚度发生变化 上下文,objective-c,macos,cocoa,nsview,nssplitview,Objective C,Macos,Cocoa,Nsview,Nssplitview,我的应用程序中有一个NSSplitView,它有3个窗格。我对NSSplitView进行了子类化,它有一个覆盖: -(CGFloat) dividerThickness { return 1.0f; } 我已经禁用了所有约束分割线最小/最大点和调整子视图大小等的代理方法 问题 当我在视网膜屏幕上拖动任何分隔器时,分隔器的厚度在拖动过程中波动。请看此视频: 无论我使用什么样的分隔器厚度,这种情况都会发生——在拖动过程中,分隔器的厚度总是变化约1px 这种情况在非视网膜屏幕上不会发生。调整窗口自
-(CGFloat) dividerThickness { return 1.0f; }
我已经禁用了所有约束分割线最小/最大点和调整子视图大小等的代理方法
问题 当我在视网膜屏幕上拖动任何分隔器时,分隔器的厚度在拖动过程中波动。请看此视频: 无论我使用什么样的分隔器厚度,这种情况都会发生——在拖动过程中,分隔器的厚度总是变化约1px 这种情况在非视网膜屏幕上不会发生。调整窗口自身大小时,也不会发生。仅当拖动分隔器时,分隔器宽度才会波动 (如果仔细观察,可以看到视图之间有一些空白,看起来NSSplitView应该绘制分隔符,但不是。请看视频中棕色选定表格行的末尾。)
我需要什么
如何解决此问题,以便在视网膜屏幕上拖动时,分隔器宽度保持不变?我通过实现此NSSplitViewDelegate方法解决了此问题:
- (CGFloat) splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex
{
return floor(proposedPosition);
}
还值得指出的是,只有当NSSplitView窗格中的子视图是NSScrollView时,才会出现此问题。窗格内的正常视图不会导致分隔器宽度波动 支持拆分视图的层(即,
[splitView SetWantLayer:YES]
)也应解决此问题。
由于滚动视图通常会自动回层,因此当不对齐点时,它们的层会与绘制的分割视图重叠。这很有效,谢谢。但是调整窗口的大小仍然会带来这个问题。有什么想法吗?编辑:其中一个NSScrollView已激活“绘制背景”。取消激活完成了任务