Using the cell of automatic height calculation, pull the colloctionView to the bottom, then adding items and reloadData. The contentoffset of the collectionview will be wrong #1441
[X] I have searched existing issues and this is not a duplicate
[X] I have attempted to reproduce the issue and include an example project.
General information
IGListKit version:4.0
iOS version(s):11.4.1 (921.9)
CocoaPods/Carthage version:1.8.4
Xcode version:11.4.1
Devices/Simulators affected:iPhone 11 Pro Max
Reproducible in the demo project? (Yes/No):Yes
Related issues:Found none
Explication
Using the cell of automatic height calculation, pull the colloctionView to the bottom, then adding items and reloadData. The contentoffset of the collectionview will be offset.But there's no problem with a fixed height cell( delete layout.estimatedItemSize = CGSize(width: 100, height: 40))
# I only changed a few lines of code in SelfSizingCellsViewController
import IGListKit
import UIKit
final class SelfSizingCellsViewController: UIViewController, ListAdapterDataSource {
lazy var adapter: ListAdapter = {
return ListAdapter(updater: ListAdapterUpdater(), viewController: self)
}()
let collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.estimatedItemSize = CGSize(width: 100, height: 40)
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.backgroundColor = UIColor(red: 0.831_372_549, green: 0.945_098_039, blue: 0.964_705_882, alpha: 1)
return collectionView
}()
var selectionModel0 = SelectionModel(options: ["Aenean lacinia bibendum nulla sed consectetur. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras mattis consectetur purus sit amet fermentum.",
"Donec sed odio dui. Donec id elit non mi porta gravida at eget metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere consectetur est at lobortis. Cras justo odio, dapibus ac facilisis in, egestas eget quam.",
"Sed posuere consectetur est at lobortis. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis"," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."," dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."], type: .fullWidth)
var data = [SelectionModel]()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(collectionView)
adapter.collectionView = collectionView
adapter.dataSource = self
data.append(selectionModel0)
additems()
}
@objc func additems() {
print("-------------willAddItems----------------\n\(self.collectionView)")
selectionModel0.options.append("abcd\(arc4random())")
self.adapter.reloadData { _ in
print("------------endReloadData-----------------\n\(self.collectionView)")
}
self.perform(#selector(additems), with: nil, afterDelay: 5)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
collectionView.frame = view.bounds
}
// MARK: ListAdapterDataSource
func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
return data as [ListDiffable]
}
func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
return SelfSizingSectionController()
}
func emptyView(for listAdapter: ListAdapter) -> UIView? { return nil }
}
New issue checklist
README
and documentationGeneral information
IGListKit
version:4.0Explication
Using the cell of automatic height calculation, pull the colloctionView to the bottom, then adding items and reloadData. The contentoffset of the collectionview will be offset.But there's no problem with a fixed height cell( delete layout.estimatedItemSize = CGSize(width: 100, height: 40))
Debug information
Demo code