这很难解释。 我正在修改Apple的InfoBarStackView示例代码。 我遇到的问题是,它看起来好像其中一个子视图被分成两部分,由NSStackview分别渲染。
在我的示例中,我在堆栈视图中添加了4个子视图,每个子视图的大小完全相同(和相同的代码)。然后将其放入NSScrollView中。 (布局是垂直的。)
运行应用程序时,我会看到前两个子视图。当我向下滚动时,奇怪的事情就开始了。渲染后续视图,渲染底部,然后渲染顶部。如果垂直尺寸是272像素,则底部渲染为256像素,顶部是余数(16)。向下滚动到最后一个视图会导致同样的问题。
我有一个Xcode 8的示例项目。如果有人想看一下,我已经发布了Xcode 8项目here。我似乎无法想出这个。
答案 0 :(得分:2)
您指的是与“标签”和“显示”按钮相交的额外边界框吗?
如果您使用Xcode的View Debugger查看视图层次结构的分解和每个视图的绘制内容,您将看到GT_BorderedView
s绘制了额外的边界框 - 也就是说,底部GT_BorderedView
分别绘制了两个边界框。
GT_BorderedView
的{{1}}实现根据传入的-drawRect:
计算并绘制边界框。但是,作为documentation states,脏矩形是«定义视图部分的矩形,需要重绘,不一定是视图的整个边界。更改实现以基于dirtyRect
计算和绘制边框而不是脏矩形会导致预期的外观。
答案 1 :(得分:-1)
[self bounds]
而不是dirtyRect可以确保正确进行绘制。