es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encabezados reutilizables para UICollectionViewCompositionalLayout.

Estoy intentando crear encabezados descriptivos para cada sección en mi UICollectionViewCompositionalLayout. Algo como esto:

enter image description here

Aquí está mi encabezado:

class CafeHeaderView: UICollectionReusableView {

    static let reuseId = "HeaderView"
    let categoryLabel = UILabel()

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupContent()
    }

    func setupContent() {
        categoryLabel.frame = CGRect(x: 16, y: 15, width: 200, height: 17)
        categoryLabel.font = UIFont(name: "Montserratarm-Medium", size: 22)
        categoryLabel.text = "Sección ??"
        addSubview(categoryLabel)
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Registre mi celda:

mainCollectionView.register(CafeHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: CafeHeaderView.reuseId)

Luego creé “boundarySupplementaryItem”:

section.boundarySupplementaryItems = [.init(layoutSize: .init(widthDimension: .fractionalWidth(1), heightDimension: .estimated(60)), elementKind: UICollectionView.elementKindSectionHeader, alignment: .top)]

Finalmente:

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CafeHeaderView.reuseId, for: indexPath)
}

Entonces, ¿hay alguna manera de determinar la sección actual y configurar el texto de mi etiqueta en consecuencia?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes determinar la sección actual y establecer el texto de tu etiqueta de acuerdo accediendo a la propiedad section del parámetro indexPath en la función collectionView(_:viewForSupplementaryElementOfKind:at:).

    Aquí está cómo puedes actualizar tu función:

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CafeHeaderView.reuseId, for: indexPath) as! CafeHeaderView
    
        // Actualiza la etiqueta con el índice de la sección actual
        header.categoryLabel.text = "Sección \(indexPath.section + 1)"
    
        return header
    }
    

    En el código anterior, accedemos a la propiedad section del parámetro indexPath utilizando indexPath.section y le sumamos 1 para obtener el índice de la sección actual (ya que los índices de sección comienzan en 0). Luego, actualizamos la propiedad text de la etiqueta con este índice usando la interpolación de cadenas.

    Esto actualizará el texto de la etiqueta del encabezado con el índice de la sección actual cuando se llame a la función collectionView(_:viewForSupplementaryElementOfKind:at:).

Comments are closed.