36.用ScrollView控制TableView和CollectionView混用的滚动与它们的自动布局

标题比较长,项目中遇到需要用tableivew和collectionview在一个页面显示,并且两个控件里的内容需要全部展开来通过一个ScrollView来进行统一滚动的需求.

思路很简单,去掉tableview和collectionview的滚动,然后将它们放到scrollview中来滚动查看其中的内容,同时使用tableview和collectionview的自动布局减少代码量和复杂度。

核心代码:

override func viewDidLayoutSubviews() {
        //第一次触发时是0,不能直接用
        if collectionView.contentSize.height > 0 {
            //collectionview的高度约束=内容高度
            collectionHeightConstraint.constant = collectionView.contentSize.height
        }
        //scrollview的内容高度=collectionview的内容高度+tableview的内容高度
        contentViewConstraint.constant = tableView.contentSize.height + collectionView.contentSize.height
    }

简单的理解就是事先设置好collectionview(也可以是tableview的)的高度约束,再当控制器的内容布局完成之后,跟据collectionview的内容高度重新设置其高度约束=内容高度,这样collectionview的内容就完全展示了出来了;然后再设置好scrollview的内容高度=collectionview的内容高度+tableview的内容高度.
注意:viewDidLayoutSubviews在页面启动后会执行两次,第一次执行,由tableview布局完成时触发,而这时的collectionView.contentSize.height = 0,所以要加个判断条件,否则collectionHeightConstraint.constant 一旦设置0之后,collectionview的代理方法不会执行,我们将会看不到collectionview的内容.

具体的代码:
https://github.com/ghyh22/TableViewCollectionViewAutoHeight

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容