setNeedsDisplay打破UIView的自动布局动画

问题描述:

我有一个UIViewController,它包含两个视图(来自两个子视图控制器):顶层内容视图和底层菜单弹出窗口。约束条件设置,以便为底部的菜单展开,顶部内容画面压扁:setNeedsDisplay打破UIView的自动布局动画

enter image description here

所有的约束都正确设置这样子视图所有的布局正确,当菜单展开和折叠。它甚至可以在UIView animateWithDuration:块中正常工作(我打电话给[self.view layoutIfNeeded]更新动画期间子视图的布局)。

但是,内容视图区域中的一个视图是包含drawRect:方法的自定义视图。每次这个视图更新时,我打电话给setNeedsDisplay。只要第一次调用setNeedsDisplay,此视图的动画就会中断,并且不会更新其帧,直到再次调用setNeedsDisplay。我无法用所有其他视图来制作动画!注释掉drawRect:方法,或者注释掉[self setNeedsDisplay],并且该视图再次完美地与父视图一起动画。

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

+0

没有任何代码,我敢打赌,你的drawRect内的图纸与约束冲突。你可以在这里添加一些代码吗? – Marcal

+0

不幸的是我必须小心地在这里添加代码,因为它是严格的NDA东西,但是发布'drawRect:'代码没有多大意义,因为仅仅包含没有任何内容的方法导致约束被破坏。 – jowie

+0

如果里面什么都没有,整个方法应该被注释掉。试着看看会发生什么。我想知道你在哪里使用self.frame。内部drawRect这是一个更好的做法,使用self.bounds – Marcal

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

yourView.contentMode = UIViewContentModeRedraw; 

并在需要时它应该重绘。