美文网首页
36.用ScrollView控制TableView和Collec

36.用ScrollView控制TableView和Collec

作者: noonez | 来源:发表于2016-11-21 20:43 被阅读222次

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

    相关文章

      网友评论

          本文标题:36.用ScrollView控制TableView和Collec

          本文链接:https://www.haomeiwen.com/subject/oynupttx.html