gpt4 book ai didi

ios - UIScrollView 最大和最小 contentOffsets?

转载 作者:可可西里 更新时间:2023-11-01 04:10:38 44 4
gpt4 key购买 nike

给定一个 UIScrollView配置了其任何标准属性(例如 contentInset)后,如何获得最小和最大 contentOffset?

即当用户一直向上滚动到左侧时,contentOffset 将被报告为什么?

即如果用户一直向下滚动到右下角,contentOffset 将被报告为什么?

最佳答案

假设我们有以下 UIScrollView:

  • 内容大小:500 x 500
  • 框架/边界大小:200 x 200
  • contentInsets: (10, 10, 20, 20)

计算的contentOffsets:

  • 最小 contentOffset:
    • .x: -contentInset.left (-10)
    • .y: -contentInset.top (-10)
  • 最大 contentOffset
    • .x: contentSize.width - bounds.width + contentInset.right (320)
    • .y: contentSize.height - bounds.height + contentInset.bottom (320)

通常一个 UIScrollView 从 contentOffset = (0, 0) 开始。但是,当您添加 contentInsets 时,它开始偏移一个负数 量。当您将第一个位置滚动到 View 中以便看不到 contentInset 时,您将位于 contentOffset = (0,0)

类似的事情发生在最后,最大偏移量不是 300,而是 320。

func minContentOffset(scrollView: UIScrollView) -> CGPoint {
return CGPoint(
x: -scrollView.contentInset.left,
y: -scrollView.contentInset.top)
}

func maxContentOffset(scrollView: UIScrollView) -> CGPoint {
return CGPoint(
x: scrollView.contentSize.width - scrollView.bounds.width + scrollView.contentInset.right,
y: scrollView.contentSize.height - scrollView.bounds.height + scrollView.contentInset.bottom)
}

然后您可以创建一个函数,使用这两个函数来确定 ScrollView 是否可滚动:

func canVerticallyScroll(scrollView: UIScrollView) -> Bool {
let scrollableHeight = maxContentOffset(scrollView: scrollView).y
- minContentOffset(scrollView: scrollView).y
let viewableHeight = scrollView.bounds.height
return viewableHeight < scrollableHeight
}

或者作为扩展:

extension UIScrollView {

var minContentOffset: CGPoint {
return CGPoint(
x: -contentInset.left,
y: -contentInset.top)
}

var maxContentOffset: CGPoint {
return CGPoint(
x: contentSize.width - bounds.width + contentInset.right,
y: contentSize.height - bounds.height + contentInset.bottom)
}

func scrollToMinContentOffset(animated: Bool) {
setContentOffset(minContentOffset, animated: animated)
}

func scrollToMaxContentOffset(animated: Bool) {
setContentOffset(maxContentOffset, animated: animated)
}
}

关于ios - UIScrollView 最大和最小 contentOffsets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192007/

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