在滚动之前启动时调用 scrollViewDidScroll
Posted
技术标签:
【中文标题】在滚动之前启动时调用 scrollViewDidScroll【英文标题】:scrollViewDidScroll called when launched before scrolling 【发布时间】:2018-07-23 11:28:47 【问题描述】:我正在使用
https://github.com/xmartlabs/XLPagerTabStrip它有containerview
,这是一个scrollview
,孩子viewController
将显示在...
我试图在用户滚动时更改视图的高度.. 这样做:
override func scrollViewDidScroll(_ scrollView: UIScrollView)
self.homeimg.image = UIImage(named: "smalllogo")
self.imageheight.constant = 116
UIView.animate(withDuration: 0.3, animations: self.view.layoutIfNeeded())
这完全可以满足我的需要.. 问题是containerview
在启动后立即滚动.. 因此,即使在滚动或触摸任何东西之前,它也会在启动时立即调用...
如何解决这个问题?并且仅在滚动或触摸时进行更改?
【问题讨论】:
如果你想更新,你不应该在 scrollViewDidScroll 中设置约束,但你应该在 viewDidLayout 中设置它 @zombie 怎么样?我只想在滚动时进行更改? 为什么不使用委托方法? 【参考方案1】:你可以试试这个
var viewAppeard = false
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
viewAppeard = true
override func scrollViewDidScroll(_ scrollView: UIScrollView)
if viewAppeard
self.homeimg.image = UIImage(named: "smalllogo")
self.imageheight.constant = 116
UIView.animate(withDuration: 0.3, animations: self.view.layoutIfNeeded())
【讨论】:
现在即使我滚动也没有任何反应......也许这是因为我实际上是在容器视图中滚动子项而不是容器视图本身? 只需检查您的 viewDidAppear 是否被调用,它是否设置了 viewAppeard 标志? @vivekDas 它的调用和 viewAppeard = true 好的,只需实现scrollView委托方法'scrollViewWillBeginDragging',您只需在viewDidAppear中设置viewAppeard = true,然后检查,从viewDidAppear中删除代码viewAppeard = true以上是关于在滚动之前启动时调用 scrollViewDidScroll的主要内容,如果未能解决你的问题,请参考以下文章
仅在用户滚动时调用 Scroll,而不是在 animate()
使用 JqueryMobile 在 phoneGap 中启动应用程序时调用服务器
启用滚动时调用 `getDrawingCache` 返回 null
如何在 recyclerview 滚动时调用 api? [复制]
是否有 RecyclerView 的 OnScrollListener 在滚动时连续调用,而不仅仅是在状态更改或滚动开始时调用?