gpt4 book ai didi

ios - 在 UICollectionView 滚动后获取可见项的更新 IndexPath

转载 作者:搜寻专家 更新时间:2023-11-01 06:01:48 25 4
gpt4 key购买 nike

我有一个 collectionView 有不同的时期(一天到一年)供用户选择。每个项目的大小等于 collectionView 本身的大小。

@IBOutlet weak var periodCollectionView: UICollectionView!
@IBOutlet weak var itemLabel: UILabel!

let collectionValues = ["Day", "Week", "Month", "Year"]
var currentVisibleItem: Int?

override func viewDidLoad() {
super.viewDidLoad()

}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 4
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PeriodName", for: indexPath) as? DisplayPeriodCollectionViewCell
else {
fatalError("Unable to cast collection view cell as DisplayPeriodCollectionViewCell")
}

cell.periodName.text = collectionValues[indexPath.item]

return cell

}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let height = collectionView.frame.height
let width = collectionView.frame.width

return CGSize(width: width, height: height)
}

我想要做的是在 collectionView 滚动后获取一个信息标签以显示当前可见项目的索引。她是代码:

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

let centerPoint = CGPoint(x: periodCollectionView.center.x + periodCollectionView.contentOffset.x, y: 1.0)
print("centerPoint: \(centerPoint)")

if let currentItemIndexPath = periodCollectionView.indexPathForItem(at: centerPoint) {
currentVisibleItem = currentItemIndexPath.item
print("index of current item: \(currentVisibleItem!)")
itemLabel.text = "\(currentVisibleItem!)"
} else {
print("could not get index of current item...")
}

}

我添加了打印语句来检查运行时是否正确定义了值,它们显示一切正常。问题是标签并不总是在滚动结束后更新它的文本,而是等待新的滚动发生:

enter image description here

我不明白为什么会这样 - 在 scrollViewDidEndDecelerating 处设置断点显示所有代码都已执行,那么标签文本有什么问题吗?

更新。不更新标签文本似乎是模拟器问题 - 在设备上运行时,标签会正确更新。

最佳答案

试试这个

override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let currentIndex = scrollView.contentOffset.x / CGFloat((itemWidth + interitemSpacing / 2))
print(currentIndex)
}

关于ios - 在 UICollectionView 滚动后获取可见项的更新 IndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47727984/

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