scrollViewDidScroll 似乎包含隐式动画;如何禁用?

scrollViewDidScroll seems to contain implicit animation; how to disable?

提问人:Fattie 提问时间:9/26/2023 更新时间:9/26/2023 访问量:29

问:

具有任何简单的表格视图或其他滚动视图。

scrollViewDidScroll(_ scrollView: UIScrollView) {
    
    let up = scroll.contentOffset.y
    print("up \(up)")
}

只需在屏幕中间添加一个小图像,并对其位置进行限制。滚动时上下移动图像。

scrollViewDidScroll(_ scrollView: UIScrollView) {
    
    let up = scroll.contentOffset.y
    print("up \(up)")

    exampleConstraint.constant = up
}

有趣的是,正如您将清楚地看到的那样,约束更改将以动画形式呈现。

这似乎不是由 UIKit 中常见的垃圾引起的,它隐式地对图层进行动画处理(in re in re)。(我试着一直往下修复图层。相反,似乎所有内容都以某种方式包裹在典型的视图动画中,或者其他东西在起作用。scrollViewDidScroll

(作为测试,在按钮等上尝试相同的操作,它正常工作,没有动画。exampleConstraint.constant = up

我发现的唯一解决方法是

scrollViewDidScroll(_ scrollView: UIScrollView) {
    
    let up = scroll.contentOffset.y
    print("up \(up)")

    DispatchQueue.main.async { [weak self] in
        exampleConstraint.constant = up
    }
}

这不是很好。

(除此之外,你被一帧帧不同步,这看起来很可怕。

请注意,在这种情况下,当然会完全失败并且不做任何事情(就像在几乎所有情况下一样!UView.performWithoutAnimation

有没有一种方法(或至少是更好的方法)在您 例如时关闭“内部”的动画。匹配动作?scrollViewDidScroll

iOS Swift 动画 UIDscrollView NSPoliptConstraint

评论

0赞 DonMag 9/29/2023
这与你正在做的事情相匹配吗?pastebin.com/8xgXpSvh......如果是这样,我没有看到你描述的动画。如果这不是您正在做的事情,请发布重现该问题的完整示例。

答: 暂无答案