layoutIfNeeded() 函数对 UIScrollView 的影响

在做 iOS 相关的约束动画时,我们一定会用到 layoutIfNeeded() 函数,但是在大多数情况下使用并没有什么问题。当与 UIScrollView 相关的控件结合使用的时候要注意了。

在开发一个 App 时(类似于浏览器的 App),需求是,滑动的时候,需要隐藏掉顶部的 navigation bar (这里我是用 UIView 自定义的一个 navigation bar)。向上滑动,让 navigation bar 移动到可视区域外消失,当然,移动的时候是有动画的,这里我用的是 constraint 相关的动画,所以我需要在最后调用一次 layoutIfNeeded() 函数。代码类似如下:

UIView.animate(withDuration: 0.35) {
    // 进行更改约束的操作
    self.view.layoutIfNeeded()
}

这时就出现问题了,滑动的时候,你想让滑动停止,当然是手指放在屏幕上,滑动就会立刻停止,不过在进行布局动画的时候,滑动将会继续,只有当动画完了的时候,视图才会响应你的点击事件。

为了避免上述的问题,建议使用 Core Graphics 来完成上述的动画效果,即:CGAffineTransform

使用 Core Graphics 完成动画,也能避免调用 layoutIfNeeded() 必须在父视图中这一要求的一些恶心的问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 在我们的小城市,资讯相对不发达,仅有的几家商店超市还停业休息。春节唯一的乐趣就是打麻将,看电影。作为一个有艺术追求...
    虎鲸骑士阅读 546评论 0 0
  • 每当我要提笔的时候,身边的人都会问我:在写什么?没什么不过瞎写写罢了。 真的是瞎写写。提笔写作要回到六七年前了...
    邵天一阅读 559评论 0 0
  • 法国在自己的主场输给了字母罗的国家,法国已经准备就绪就等冠军之后的狂欢,但是事与愿违,备好酒席邀请了亲朋好友之后亲...
    血公子阅读 238评论 0 1
  • 你最害怕什么? 我天生就是一个胆小鬼,我怕蜘蛛蜈蚣等许多虫字旁;我更怕虚无的鬼魂,即使我没做过什么亏心事;我还怕我...
    宋三不阅读 233评论 0 0