layoutIfNeeded() 函数对 UIScrollView 的影响
在做 iOS 相关的约束动画时,我们一定会用到 layoutIfNeeded()
函数,但是在大多数情况下使用并没有什么问题。当与 UIScrollView
相关的控件结合使用的时候要注意了。
在开发一个 App 时(类似于浏览器的 App),需求是,滑动的时候,需要隐藏掉顶部的 navigation bar
(这里我是用 UIView
自定义的一个 navigation bar
)。向上滑动,让 navigation bar
移动到可视区域外消失,当然,移动的时候是有动画的,这里我用的是 constraint
相关的动画,所以我需要在最后调用一次 layoutIfNeeded()
函数。代码类似如下:
1 | UIView.animate(withDuration: 0.35) { |
这时就出现问题了,滑动的时候,你想让滑动停止,当然是手指放在屏幕上,滑动就会立刻停止,不过在进行布局动画的时候,滑动将会继续,只有当动画完了的时候,视图才会响应你的点击事件。
为了避免上述的问题,建议使用 Core Graphics
来完成上述的动画效果,即:CGAffineTransform
使用 Core Graphics
完成动画,也能避免 layoutIfNeeded()
必须在父视图中调用这一要求的一些恶心的问题。