setNeedsDisplay打破了UIView的自动布局动画

时间:2014-04-10 13:59:46

标签: ios objective-c uiview autolayout drawrect

我有一个UIViewController,它包含两个视图(来自两个子视图控制器):一个顶级内容视图和一个底部菜单弹出窗口。设置约束,以便在底部菜单展开时,顶部内容视图被压缩:

enter image description here

所有约束都已正确设置,因此在展开和折叠菜单时,子视图都会正确布局。它甚至可以与UIView animateWithDuration:块一起正常工作(我在动画期间调用[self.view layoutIfNeeded]来更新子视图的布局)。

但是,“内容视图”区域中的一个视图是包含drawRect:方法的自定义视图。每次此视图更新时,我都会调用setNeedsDisplay。第一次调用setNeedsDisplay时,此视图的动画会中断,并且在再次调用setNeedsDisplay之前不会更新其帧。我不能让它与所有其他观点动画!注释掉drawRect:方法,或注释掉[self setNeedsDisplay],并且视图会再次完美地显示父视图。

有谁知道我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为你应该让iOS为你工作。 如果您的视图需要经常重新绘制,请设置视图的contentMode:

yourView.contentMode = UIViewContentModeRedraw;

它应该在需要时重绘。