3

我正在尝试使用 Cocoa 创建一个小的 Finder 克隆。我将一个源列表表视图(用作侧边栏)和一个标准表视图放置在NSSplitViewNSSplitViewController. 不幸的是,当我运行它时,标准表格视图的白色背景被绘制在窗口的右下角,导致一个非圆角: 画在右下角

我可以通过不使用NSSplitViewController标准 nib 文件或情节提要来避免该问题,以获得所需的结果:

正确绘制,尽管没有 NSSplitViewController

但是……我真的很想用NSSplitViewController。有什么办法可以防止这种情况发生吗?

这是带有屏幕截图项目的 Xcode 工作区。

4

2 回答 2

3

我见过这样的问题,它似乎是真正的错误。但是有解决方法。您需要确保 NSSplitViewController 在由 CA 层支持的视图中呈现自身。因此,为了在您的项目中执行此操作,我添加了带有容器视图的中间人视图控制器。然后我将你的拆分视图放在这个容器视图中。最后,容器视图的父视图设置为支持层。这是图片:

在此处输入图像描述

之后我可以看到一切正常:

在此处输入图像描述

另一方面:确保在真正需要之前不要使用 1000 优先级的约束。我通常使用 750(我也修复了它)。否则你会收到很多关于不满意的事情的警告。

这是你固定的项目: https ://github.com/emankovski/splitviewroundcorrners

于 2016-07-03T01:48:57.567 回答
1

在将视图层次结构中的根视图添加到视图层次结构之前,请确保它是层支持的。

例子。这行得通。经测试并确认可在 macOS 10.12 Sierra 中使用。Xcode 8.0。

split.view.wantsLayer = true
window.contentViewController = split
split.splitViewItems = [
    NSSplitViewItem(viewController: vc),
]

但这不是。

window.contentViewController = split
split.splitViewItems = [
    NSSplitViewItem(viewController: vc),
]
split.view.wantsLayer = true

我不知道这里发生了什么,以及为什么会这样。但让我推测一下。

NSWindow没有图层支持的根视图只是在不涉及合成器的情况下天真地绘制。所以他们不能掩盖角落,这样的伪影就会出现。只要让它们有层支持就可以了。就像@Eugene 指出的那样。

让所有东西都有层支持并不难。只需将根视图设置为支持层,层次结构中的每个子视图都将支持层支持到叶子。(RTFM 了解详情:CALayer.wantsLayer。)

于 2016-10-15T08:39:57.773 回答