drawRect在子视图?

时间:2013-10-21 15:14:20

标签: ios objective-c uikit drawrect

我创建了一个包含一堆子视图的容器视图 - 一个集合视图,一个自定义工具栏和一些零碎的部分。

设计在顶部,左侧和右侧有边框,但不在底部,所以我覆盖了drawRect以包含边框。

当我添加工具栏时,我注意到它出现在边框的顶部。 (出于某种原因,我最初认为它不会,但当然它确实如此!)。

无论如何,我可以告诉drawRect绘制我的子视图的顶部吗?

当然还有许多其他方法可以解决我的问题(例如调整工具栏的框架)但是我问这个问题是为了深入了解绘图如何与合成和视图层次结构相关。

3 个答案:

答案 0 :(得分:5)

绘图发生在UIView的所有子视图下面。将其视为基础 - 视图的实际部分 - 然后将每个子视图添加到视图的顶部。要使子视图上方的绘图与希望子视图显示在视图下方,同时仍然是子视图一样。也许这个比喻更清楚为什么它必须始终在底层。它还会引导您从逻辑上解决问题:

要使绘图显示在子视图上方,只需创建一个新的UIView子类以将绘图代码放在其中,并将其置于所有其他子视图之上。

覆盖您的UIView的addSubview:实施方式也是一个好主意,以确保您的子视图始终保持最佳状态。

答案 1 :(得分:2)

我相信你不能,因为drawRect首先被调用为视图,当它完成绘制时,调用drawRect来调用子视图来绘制它。也许只是在该视图的顶部创建另一个子视图,它具有您需要的边框并且在其他地方都是透明的?

答案 2 :(得分:2)

子视图为drawn on top of their super views。所以你的问题的答案是否定的。

当你在容器视图上绘制边框时,Cocoa甚至还没有开始绘制工具栏。

我猜你可以让边框的顶部成为子视图或者将工具栏向下移动一点。