36.用ScrollView控制TableView和Collec

2016-11-21  本文已影响222人  noonez

标题比较长,项目中遇到需要用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

上一篇下一篇

猜你喜欢

热点阅读