【发布时间】:2014-04-10 13:59:46
【问题描述】:
我有一个 UIViewController 包含两个视图(来自两个子视图控制器):一个顶部内容视图和一个底部菜单弹出窗口。设置了约束,以便在底部菜单展开时,顶部内容视图被压扁:
所有约束都设置正确,因此当菜单展开和折叠时子视图的所有布局都正确。它甚至可以与 UIView animateWithDuration: 块一起正常工作(我正在调用 [self.view layoutIfNeeded] 以在动画期间更新子视图的布局)。
但是,内容视图区域中的视图之一是包含drawRect: 方法的自定义视图。每次此视图更新时,我都会致电setNeedsDisplay。一旦第一次调用setNeedsDisplay,这个视图的动画就会中断并且不会更新它的帧,直到再次调用setNeedsDisplay。我无法让它与所有其他视图一起制作动画!注释掉drawRect:方法,或者注释掉[self setNeedsDisplay],视图又和父视图完美动画了。
有人知道我做错了什么吗?
【问题讨论】:
-
没有看到任何代码,我敢打赌你在 drawRect 中的绘图与约束冲突。你能在这里添加一些代码吗?
-
不幸的是,我必须小心在这里添加代码,因为它是严格的 NDA 内容,但是发布
drawRect:代码没有什么意义,因为仅仅包含没有任何内容的方法会导致要打破的约束。 -
如果里面什么都没有,整个方法都要注释掉。试试看会发生什么。我想知道你是否在任何时候使用 self.frame 。在 drawRect 内部,使用 self.bounds 是一种更好的做法
-
不抱歉...我的意思是,如果将整个方法注释掉,它就可以正常工作。如果我只添加一个
drawRect:,即使其中没有任何内容,动画也会中断。你说self.bounds而不是self.frame很有趣——这背后有什么原因吗?我在drawRect:的三个地方使用了self.frame,所以我现在将它们更改为self.bounds。不幸的是,它没有任何区别。
标签: ios objective-c uiview autolayout drawrect