这将很难解释。我正在修改苹果公司的InfoBarStackView示例代码。我遇到的问题是,似乎其中一个子视图被NSStackview一分为二,并分别呈现。
在我的示例中,我在堆栈视图中添加了4个子视图,每个子视图的大小(和代码)完全相同。然后将其放入NSScrollView中。(布局是垂直的。)
当应用程序运行时,我看到了前两个子视图。当我向下滚动时,怪异就开始了。随后的视图被渲染,其中底部被渲染,然后顶部被渲染。如果垂直大小为272像素,则底部渲染为256像素,顶部为余数(16)。向下滚动到最后一个视图会导致同样的问题。
以下是一些屏幕截图以供说明:


我有一个Xcode8的样例项目,我已经发布了Xcode8项目here,如果有人想看看的话。我似乎想不通这件事。
发布于 2017-05-17 07:57:44
你指的是与“标签”和“显示”按钮相交的额外边界框吗?
如果您使用Xcode的视图调试器查看视图层次结构的分解和每个视图的绘制内容,您将看到额外的边界框是由GT_BorderedView绘制的-也就是说,底部的GT_BorderedView每个都绘制两个边界框。
GT_BorderedView的-drawRect:实现是基于传入的dirtyRect计算和绘制边界框的。但是,作为documentation states,脏矩形是“定义需要重绘的视图部分的矩形”,而不一定是视图的整个边界。更改实现以基于[self bounds]而不是脏矩形计算和绘制边界会得到预期的外观。
发布于 2017-05-17 08:02:38
泰勒成功了。我没有意识到drawRect没有渲染整个视图。使用[self bounds]而不是dirtyRect可以确保正确地进行绘制。
https://stackoverflow.com/questions/44011137
复制相似问题