在集合视图中显示/隐藏顶行

Posted

技术标签:

【中文标题】在集合视图中显示/隐藏顶行【英文标题】:show/hide top rows in collection view 【发布时间】:2017-11-06 21:13:09 【问题描述】:

我正在尝试使用集合视图构建登录/注册页面 当用户选择登录段控件时,我希望能够删除前 4 行并缩小集合视图 我想重新添加这 4 行并相应地重新调整集合视图的大小。 我还希望能够在添加-删除这些行时维护用户在电子邮件文本字段中输入的文本。Main Screen

我尝试使用索引路径中的删除项目,但不知道如何在顶部重新输入它们 因此,我尝试使用 .ishidden = true 而不是删除,但反复更改段控制值会导致在文本字段中输入的文本放置在不同的单元格中。例如,如果我在带有隐藏单元格的登录页面上,并且我在电子邮件文本字段中输入 Hello,然后我单击注册,将显示完整的表单,并且 Hello 是姓氏文本字段中的文本,并且它不断出现在不同的如果我继续在登录和注册之间切换,则文本字段。

我面临的另一个问题是,当我尝试使登录屏幕如下所示时 Login Screen 通过更改collectionView高度约束常量,并为collectionView.contentInset.Top设置一个负值,它确实像我想要的那样出现,但是一旦我选择了Register,它就不会加载完整的表单,这就是它的方式好像。 partial register

我的段控制更改代码如下:

@objc func handleLoginRegisterChange() 
        if LoginRegisterSegmentControl.selectedSegmentIndex == 0 
            LoginRegisterButton.setTitle("Login", for: .normal)
            //collectionView.reloadData()
            collectionView.cellForItem(at: IndexPath(item: 0, section: 0))?.isHidden = true
            collectionView.cellForItem(at: IndexPath(item: 1, section: 0))?.isHidden = true
            collectionView.cellForItem(at: IndexPath(item: 2, section: 0))?.isHidden = true
            collectionView.cellForItem(at: IndexPath(item: 3, section: 0))?.isHidden = true
            collectionView.contentInset.top = -160.6
            collectionViewHeight.constant = 80
        
        else if LoginRegisterSegmentControl.selectedSegmentIndex == 1 
            LoginRegisterButton.setTitle("Register", for: .normal)
            collectionView.cellForItem(at: IndexPath(item: 0, section: 0))?.isHidden = false
            collectionView.cellForItem(at: IndexPath(item: 1, section: 0))?.isHidden = false
            collectionView.cellForItem(at: IndexPath(item: 2, section: 0))?.isHidden = false
            collectionView.cellForItem(at: IndexPath(item: 3, section: 0))?.isHidden = false
            collectionView.reloadData()
            collectionView.contentInset.top = 0
            collectionViewHeight.constant = 240
        
    

我的 customCell 只有一个文本字段

这就是我设置占位符的方式

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let customCell = collectionView.dequeueReusableCell(withReuseIdentifier: customeCellIdentifier, for: indexPath) as! CustomCell
    customCell.textField.placeholder = signUpPlaceHolders[indexPath.row]
    return customCell

signUpPlaceHolder 数组是:

let signUpPlaceHolders = ["First Name", "Last Name", "Company Name", "Phone", "Email", "Password"]

我是 Swift 的初学者,正在尝试找出集合视图,我们将非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

我建议检查 Apple 文档中的 UICollectionView 类,然后对于分段控制操作中的示例,您可以在将数组声明为 var 后更新数组:

@objc func handleLoginRegisterChange() 
    if LoginRegisterSegmentControl.selectedSegmentIndex == 0     
        signUpPlaceHolders = ["Email", "Password"]
        collectionViewHeight.constant = 80
     else  
        signUpPlaceHolders = ["First Name", "Last Name", "Company Name", "Phone", "Email", "Password"]
        collectionViewHeight.constant = 240
    
    collectionView.reloadData()

【讨论】:

以上是关于在集合视图中显示/隐藏顶行的主要内容,如果未能解决你的问题,请参考以下文章

有效地为集合中的每个类别选择顶行

搜索表格视图时如何隐藏集合视图?

更改集合视图的 isHidden 属性不适用于搜索栏取消按钮

快速滚动时隐藏显示顶视图

在堆栈视图内具有堆栈视图的水平集合视图在重新加载动画时隐藏内部堆栈视图

swift中的集合视图单元格被压缩