如何解决首次出现Controller时获得可见项目?
这就是我所做的:
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
// Current visible items
let items = messagesCollectionView.indexPathsForVisibleItems
// Changed items
let itemsSet = Set.init(items)
let unionSet = itemsSet.union(self.visibleItems)
let intersectSet = itemsSet.intersection(self.visibleItems)
unionSet.subtracting(intersectSet)
}
但是indexPathsForVisibleItems
在页面第一次出现时不正确,并且如果collectionView滚动也可以正常工作...
有人建议吗?
解决方法
只有在集合视图上滚动时,才会执行func scrollViewDidScroll(_ scrollView: UIScrollView)
主体内的代码,因此很明显,当视图出现时,没有滚动事件,因此该代码将不会执行。
您需要一个可以在视图出现时触发代码的地方,我建议viewDidAppear(_:)
另一种方法是在集合视图上观察contentSize
属性。
self.yourCollectionView?.addObserver(self,forKeyPath: "contentSize",options: NSKeyValueObservingOptions.Old,context: nil)
并使用observeValue(forKeyPath:of:change:context:)
委托方法处理更新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。