带有UICollectionView的iOS如何实现这种布局

时间:2019-03-18 09:53:21

标签: ios uicollectionview uicollectionviewcell uicollectionviewlayout

CollectionView with left view Show CollectionView with left view Hide

要求:

  • 如果左视图是否可见,我应该能够滚动整个视图(如果我在视图中的任何位置滚动,所有组件应一次滚动)。
  • 通过点击显示/隐藏左视图按钮按钮,它应该可以隐藏或显示左视图。
  • 在单元格中(只有单元格不在左侧),具有展开/折叠功能(我可以增加/减小单元格高度)
  • 如果我在设备设置应用中更改字体大小,那么它在这里也应该生效(因此支持动态字体大小)

我尝试过的事情:

我尝试使用tableview,scroll view,但是没有运气。最后要尝试使用集合视图,请问有人可以帮助我如何进行集合视图。如果使用集合视图,将来还会出现任何复杂情况。

2 个答案:

答案 0 :(得分:1)

最佳方法。

  1. 您的UI层次结构应该是这样。
  

StackView

     
    

CollectionView

         

TableView

  

注意:您可以同时使用CollectionViewTableView,但我都希望两者都不同,这样我就不必在委托人和数据源中添加条件,并且可以管理容易。选择就是您喜欢的。

enter image description here

  1. 现在您的UI设计看起来像这样

    • 绿色按钮用于显示隐藏您的左侧收藏夹视图(您在帖子中提到过)。

enter image description here

  1. 根据需要在CollectionViewTableView中设置数据。

  2. 要切换左菜单,只需对greenButton动作使用以下一行代码。

    @IBAction func btnToggle(_ sender: Any) {
        colView.isHidden = !colView.isHidden 
    }
    
  3. 用于简单动画

    @IBAction func btnToggle(_ sender: Any) {
        UIView.animate(withDuration: 0.3) {            
            self.colView.isHidden = !self.colView.isHidden
        }
    }
    

输出:

enter image description here

  

编辑

您可以在scrollview中使用stackView并关闭colview和tblView滚动。检查以下内容:

  1. UI层次结构

enter image description here

  1. 其他代码工作

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        colView.isScrollEnabled = false
        tblView.isScrollEnabled = false
    
        colView.reloadData()
        tblView.reloadData()
    
        scrollView.contentSize = CGSize(width: self.view.frame.width,
                                        height:  max(colView.contentSize.height, tblView.contentSize.height))
        stackHeight.constant = scrollView.contentSize.height
    
    }
    

注意::这可能会导致一些意外的输出(可能是/不能),因此您需要注意这一点。

输出:

enter image description here

答案 1 :(得分:0)

您需要的是具有自定义布局的UICollectionView。您可以使用这种方法来达到所需的效果。

教程的基调是如何实现自己的自定义布局。 Here是其中之一