0

这将很难解释。我正在修改 Apple 的 InfoBarStackView 示例代码。我遇到的问题是,其中一个子视图看起来好像被 NSStackview 一分为二并单独呈现。

在我的示例中,我将 4 个子视图添加到我的堆栈视图中,每个子视图的大小完全相同(和相同的代码)。然后将其放入 NSScrollView。(布局是垂直的。)

当应用程序运行时,我看到了前两个子视图。当我向下滚动时,奇怪的事情就开始了。随后的视图被渲染,其中底部被渲染,然后顶部被渲染。如果垂直大小为 272 像素,则底部渲染为 256 像素,顶部为余数 (16)。向下滚动到最后一个视图会导致同样的问题。

附上一些屏幕截图来说明: 启动时 NSStackView 中的 NSViews..

NSStackView 中的 NSViews 被分成两部分..

我有一个 Xcode 8 的示例项目。如果有人想看看,我已经在这里发布了 Xcode 8 项目。我似乎无法弄清楚这一点。

4

2 回答 2

2

您是指与“标签”和“显示”按钮相交的额外边界框吗?

如果你使用Xcode的View Debugger查看视图层次结构的分解和每个视图绘制的内容,你会看到额外的边界框是由GT_BorderedViews绘制的——即底部GT_BorderedView的s每个绘制两个边界框.

GT_BorderedView的实现-drawRect:基于dirtyRect传入的计算和绘制边界框。但是,正如文档所述,脏矩形是“定义需要重绘的视图部分的矩形”,不一定是整个边界看法。更改实现以基于[self bounds]而不是脏矩形计算和绘制边框会导致预期的外观。

于 2017-05-16T23:57:44.440 回答
-1

泰勒成功了。我没有意识到 drawRect 没有渲染整个视图。使用[self bounds]而不是dirtyRect 可确保正确进行绘制。

于 2017-05-17T00:02:38.200 回答