Swift: 在 UIWebview 滚动时隐藏 UIStackView

Swift: Hide UIStackView on UIWebview Scroll

我有一个 UIWebview,上面是一个 UIStackView。我想 hideshow 带有 animation 的 stackview 在 webview 中滚动,就像在chrome 浏览器。

如何实现?

P.S:这个没用

ScrollViewscrollViewDidScroll,您可以使用它来检测滚动并使用 UIView 中的方法 animate(withDuration duration: TimeInterval, animations: @escaping () -> Swift.Void) 来更改 StackView 的高度。这可能是最简单的解决方案。

编辑:

如果您想更早地检测交互,请尝试 scrollViewWillBeginDragging(_ scrollView: UIScrollView)。如果这也不能解决您的问题,请尝试创建您自己的自定义手势并将其添加到滚动视图。

我在遵循 Axel 的 建议后开始工作。 这是代码:

var lastContentOffset: CGPoint!

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    lastContentOffset = scrollView.contentOffset
}

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
    if lastContentOffset.y > scrollView.contentOffset.y {
        print("Going up!")
        if topBarStackView.isHidden == true{
            UIView.animate(withDuration: 0.2, animations: {
                self.topBarStackView.isHidden = false
            })
        }
    } else {
        print("Going down!")
        if topBarStackView.isHidden == false {
            UIView.animate(withDuration: 0.2, animations: {
                self.topBarStackView.isHidden = true
            })
        }
    }
}