gpt4 book ai didi

ios - 如何快速访问滚动条位置

转载 作者:行者123 更新时间:2023-12-01 16:21:25 24 4
gpt4 key购买 nike

我正在尝试访问滚动条在 ScrollView 中的位置,以便我可以将一些 UI 元素附加到它。我发现访问它的唯一方法是 scrollViewDidScroll(_ scrollView:)

这为我提供了 scrollView.contentOffset.y 属性,但我似乎无法在运行时使用它来将我的 UI 附加到它。我认为这给了我整个 ScrollView 的长度,而不是滚动条的位置。

我基本上是在尝试执行此屏幕截图中用红色圆圈圈出的内容。 (KakaoTalk 消息)

enter image description here

最佳答案

我发现获取滚动条位置的相对位置的最简单方法是找到它在 ScrollView 中的当前百分比,并使用该值找到滚动条在边界内的百分比。

ScrollView 位置:(scrollView.contentOffset.y/scrollView.contentSize.height)

这基本上是 ScrollView 的当前滚动位置/总高度

我们称它为 scrollPercent

let scrollPercent = (scrollView.contentOffset.y / scrollView.contentSize.height)

这将为您提供介于 0 和 1(0% 和 100%)之间的百分比值。

您可以将scrollPercent乘以Parent View的最大高度view.bounds.size.height,得到滚动条的近似Y值风景。

let scrollBarPosition = scrollPercent * (view.bounds.size.height)

这可以用作您的 UI 元素的 Y 值。

当你这样做时,一定要检查 scrollView.contentSize.height 是否 > 0,因为它从零开始,如果你试图除以它,数字将达到无穷大你的应用程序会崩溃。

最终的解决方案是这样的:

func scrollViewDidScroll(_ scrollView: UIScrollView) {

let scrollBarPosition: CGFloat = (scrollView.contentOffset.y / scrollView.contentSize.height) * (view.bounds.size.height)

if scrollView.contentSize.height > 0 {
dateScrollbar.snp.remakeConstraints { (make) in
make.centerY.equalTo(scrollBarPosition)
make.trailing.equalToSuperview().inset(110)
}

}
}

注意:我正在使用一个名为 SnapKit 的自动布局库来设置自动布局约束。

编辑:上述解决方案有效,但它还会将您的新 UI 扩展到 ScrollView 顶部和底部的屏幕外。

要解决此问题:将 subview 添加到父 View ,并使 subview 的高度成为 scrollBarPosition 的分母。这对于像图片这样的任何 UI 来说就像一个“轨道”,可以滑动并保持在其范围内。

let scrollBarTrack = UIView()
view.addSubView(scrollBarTrack)
//Put it wherever you want, with the height being equal to whatever you want, and the width can be something like 1.

然后更新你的 scrollBarPosition

let scrollBarPosition = scrollPercent * (scrollBarTrack.bounds.size.height)

它应该保持在任何范围内 :)

关于ios - 如何快速访问滚动条位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com