layoutIfNeeded() 函数对 UIScrollView 的影响
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()
必须在父视图中调用这一要求的一些恶心的问题。