基于scrollview
首先,UICollectionView模块和TableView一样, 都是继承自ScrollView。所以ScrollView上除了contentSize以外其他的属性,都适用CollectionView上,比如代码控制滑动位等。
cell数量不一致导致的崩溃
collectionView 和 tableView 代码写法不对的话, 都会存在这个问题.
笔者也遇到了这个麻烦, 网上解决办法也很多。后来发现了个规律,每次加入数据直接使用reloadData可以,但是会闪白屏,体验太差。但是使用insert插入indexPath数据就会导致不一致。后来发现第一次使用reloadData,之后再次插入时使用insert就良好的解决了问题。
更新部分cell
当首部位有更新时,你希望只更新插入的部分,这个想法是对的,但是UI操作逻辑是错误的,当你插入数据到前端时,其后的元素是需要更新。妥当的做法是使用insert插入目标的indexPath(有几个新值插入几个),然后通过api获取所有显示中的indexPath组,对这些indexPath整体刷新, 也就是当前屏幕刷新。
主线程
collection更新时不要在子线程下更新,因为属于UI显示层面的更新都是主线程来完成的,所以这里需要注意,比如使用了网络下载数据,这种代码完成时本身就不在主线程,所以需要强制插入到主线程更新。
有的时候不在主线程更新UI只是表现的更新迟钝,但是多数时候如果UI不在主线程更新,则会导致app崩溃。而iOS11对UI在子线程下刷新更加严格,在iOS10上表现完好,在iOS11上崩溃太普遍了。
如何做到自动翻页
如果说的是向下翻页, 这个简单, 在collectionView创建时绑定一个view作为Footer, 注册当Footer显示时, 就进行下一页请求和更新数据
那么如何更新首页数据,当首页数据需要更新时上面已经提到了数据的做法,现在说是如何能看到那个下啦刷新的loading菊花。方法很简单,只要基于scrollView的类型下添加UIRefreshButtion这个按钮即可,并不需要设置位置,绑定它的更新(也就是下拉)事件即可。