【问题标题】:scrollViewDidScroll called when launched before scrolling在滚动之前启动时调用 scrollViewDidScroll
【发布时间】:2018-07-23 11:28:47
【问题描述】:

我正在使用

它有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 怎么样?我只想在滚动时进行更改?
  • 为什么不使用委托方法?

标签: ios swift xcode uiscrollview


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
相关资源
最近更新 更多