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.

El GroupHeaderTemplate afecta la altura de los elementos en la CollectionView en Xamarin Forms al utilizar la estrategia MeasureFirstItem.

Tengo un simple CollectionView que mostrará imágenes y quiero que sean del mismo tamaño (por ejemplo, 60 unidades) y también están agrupadas. Como quería que el rendimiento del desplazamiento fuera bueno, utilicé ItemSizingStrategy="MeasureFirstItem", pero luego la altura de las imágenes terminó siendo la misma que la del encabezado.

Este simple CollectionView muestra este problema, donde mostramos Labels con agrupación.

<collectionview x:name="CollectionViewTempalte" itemsizingstrategy="MeasureFirstItem" isgrouped="True" itemssource="{Binding Items}">
<collectionview.groupheadertemplate>
    <datatemplate x:datatype="textcollectionview:GroupSampleDate">
        <stacklayout orientation="Vertical">
            <label text="Encabezado del Grupo"></label>
        </stacklayout>
    </datatemplate>
</collectionview.groupheadertemplate>

<collectionview.itemslayout>
    <griditemslayout orientation="Vertical" span="4" verticalitemspacing="1" horizontalitemspacing="1"></griditemslayout>
</collectionview.itemslayout>

<collectionview.itemtemplate>
    <datatemplate x:datatype="textcollectionview:SampelData">
        <grid padding="2" backgroundcolor="Red">
            <grid horizontaloptions="Center" heightrequest="86" widthrequest="86" backgroundcolor="Yellow">
                <label text="Hola" backgroundcolor="Green"></label>
            </grid>               
        </grid>
    </datatemplate>
</collectionview.itemtemplate>


“`

No sé por qué, pero el CollectionView está seleccionando el encabezado como el primer elemento y estableciendo la Altura de los elementos en la Altura del encabezado.

Funciona si configuro ItemSizingStrategy="MeasureAllItems", pero quiero saber cómo hacer que funcione con MeasureFirstItem.

También encontré esto en los problemas (issues) https://github.com/xamarin/Xamarin.Forms/issues/8467 pero no hubo respuesta allí.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de que el CollectionView selecciona el encabezado como el primer elemento y estableciendo la altura de los elementos como la altura del encabezado al utilizar ItemSizingStrategy="MeasureFirstItem", puedes establecer la altura de la GroupHeaderTemplate en cero. Esto evitará que el CollectionView lo seleccione como el primer elemento y establezca la altura de los elementos como la altura del encabezado.

    Puedes modificar la sección GroupHeaderTemplate del código para incluir un HeightRequest de 0 de la siguiente manera:

    <collectionview.groupheadertemplate>
        <datatemplate x:datatype="textcollectionview:GroupSampleDate">
            <stacklayout orientation="Vertical" heightrequest="0">
                <label text="Encabezado del Grupo"></label>
            </stacklayout>
        </datatemplate>
    </collectionview.groupheadertemplate>
    

    Esta modificación te permitirá mantener ItemSizingStrategy="MeasureFirstItem" mientras aseguras que la altura de las imágenes se mantenga igual al tamaño especificado (60 unidades) sin verse afectada por la altura del encabezado.

Comments are closed.