代码之家  ›  专栏  ›  技术社区  ›  Dani iman kazemayni

ui集合视图标题更改

  •  0
  • Dani iman kazemayni  · 技术社区  · 6 年前

    我有一个 UICollectionView 4俗 UICollectionViewCells . 在 ui集合视图 有一个 UISegmentedControl . 我的目标是改变标题 UILabel 扮演头衔的角色。现在,如果分段的控件值已更改,则重新加载单元格并切换标题,但它与第一个标题重叠。我不明白为什么。

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        if kind == UICollectionElementKindSectionHeader {
            let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HeaderDiscoverVC", for: indexPath) as! HeaderDiscoverVC
            headerView.frame = CGRect(x: 0, y: 0, width: collectionView.frame.width, height: 30)
            headerView.backgroundColor = UIColor.hex("d9e2e7")
            let label = UILabel(frame: CGRect(x: 16, y: 0, width: headerView.frame.width, height: 30))
    
            switch segReusableIdentifier {
            case "Reply":
                label.text = "Reply"
            case "Media":
                label.text = "Media"
            case "Likes":
                label.text = "Likes"
            case "Comments":
                label.text = "Comments"
            default:
                label.text = ""
            }
            label.font = UIFont(name: Fonts.OpenSans_Bold, size: 16)
            label.textColor = UIColor.hex("8a9da6")
            headerView.addSubview(label)
            return headerView
        }
    
       fatalError("Unexpected element kind")
    } 
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Bhavin Kansagara    6 年前

    问题在于您向标题视图添加标签的方式。

    您应该将headerView.addSubView(label)放到headerDiscOverview类中。同时将颜色和字体设置为同一类。

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    if kind == UICollectionElementKindSectionHeader {
        let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HeaderDiscoverVC", for: indexPath) as! HeaderDiscoverVC
        headerView.frame = CGRect(x: 0, y: 0, width: collectionView.frame.width, height: 30)
    
        // MOVE THE COMMENTED LINE TO YOUR HeaderDiscoverVC
        //headerView.backgroundColor = UIColor.hex("d9e2e7")
        headerView.label.frame = CGRect(x: 16, y: 0, width: headerView.frame.width, height: 30)
    
        switch segReusableIdentifier {
        case "Reply":
            headerView.label.text = "Reply"
        case "Media":
            headerView.label.text = "Media"
        case "Likes":
            headerView.label.text = "Likes"
        case "Comments":
            headerView.label.text = "Comments"
        default:
            headerView.label.text = ""
        }
    
        // MOVE THE COMMENTED LINES TO YOUR HeaderDiscoverVC
        //label.font = UIFont(name: Fonts.OpenSans_Bold, size: 16)
        //label.textColor = UIColor.hex("8a9da6")
        //headerView.addSubview(label)
        return headerView
    }
    
    fatalError("Unexpected element kind")
    } 
    

    尝试分享你的结果

        2
  •  0
  •   Amit    6 年前

    您正在添加 label 以编程方式 headerView 在重新添加之前应删除。 dequeueReusableSupplementaryView 不要删除以编程方式添加的子视图。

    在您的代码中:

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        if kind == UICollectionElementKindSectionHeader {
            let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HeaderDiscoverVC", for: indexPath) as! HeaderDiscoverVC
            headerView.frame = CGRect(x: 0, y: 0, width: collectionView.frame.width, height: 30)
            headerView.backgroundColor = UIColor.hex("d9e2e7")
    
            ///// Add below code to remove all subviews first before adding any new subview programmatically 
            for label in headerView.subviews {
                if let mylabel = label as? UILabel {
                    mylabel.removeFromSuperview()
                }
            }
    
            ////////////////
            let label = UILabel(frame: CGRect(x: 16, y: 0, width: headerView.frame.width, height: 30))
    
            switch segReusableIdentifier {
            case "Reply":
                label.text = "Reply"
            case "Media":
                label.text = "Media"
            case "Likes":
                label.text = "Likes"
            case "Comments":
                label.text = "Comments"
            default:
                label.text = ""
            }
            label.font = UIFont(name: Fonts.OpenSans_Bold, size: 16)
            label.textColor = UIColor.hex("8a9da6")
            headerView.addSubview(label)
            return headerView
        }
    
       fatalError("Unexpected element kind")
    } 
    

    更好的方法是 标签 在里面 HeaderDiscoverVC 在代码中使用它为:

     headerView.label.text = "Your data"
    

    这样你就不必移除 subViews 以编程方式。