在滚动之前启动时调用 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 在滚动时连续调用,而不仅仅是在状态更改或滚动开始时调用?

UITableViewCell cellForRowAtIndexPath 首次滚动时调用大量行