Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSSplitView:在视网膜屏幕上拖动期间分隔器厚度发生变化 上下文_Objective C_Macos_Cocoa_Nsview_Nssplitview - Fatal编程技术网

Objective c 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 这种情况在非视网膜屏幕上不会发生。调整窗口自

我的应用程序中有一个NSSplitView,它有3个窗格。我对NSSplitView进行了子类化,它有一个覆盖:

-(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已激活“绘制背景”。取消激活完成了任务