NSStackView / NSScrollView - 一分为二的NSStackview子视图?

时间:2017-05-16 20:37:38

标签: objective-c nsstackview

这很难解释。 我正在修改Apple的InfoBarStackView示例代码。 我遇到的问题是,它看起来好像其中一个子视图被分成两部分,由NSStackview分别渲染。

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

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

附上一些屏幕抓取来说明: NSViews in NSStackView upon startup..

NSViews in NSStackView are chopped into two..

我有一个Xcode 8的示例项目。如果有人想看一下,我已经发布了Xcode 8项目here。我似乎无法想出这个。

2 个答案:

答案 0 :(得分:2)

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

如果您使用Xcode的View Debugger查看视图层次结构的分解和每个视图的绘制内容,您将看到GT_BorderedView s绘制了额外的边界框 - 也就是说,底部GT_BorderedView分别绘制了两个边界框。

GT_BorderedView的{​​{1}}实现根据传入的-drawRect:计算并绘制边界框。但是,作为documentation states,脏矩形是«定义视图部分的矩形,需要重绘,不一定是视图的整个边界。更改实现以基于dirtyRect计算和绘制边框而不是脏矩形会导致预期的外观。

答案 1 :(得分:-1)

泰勒钉了它。我没有意识到drawRect没有呈现整个视图。使用[self bounds]而不是dirtyRect可以确保正确进行绘制。