UICollectionView: нежелательное пространство между элементами последней строки

Мы только что опубликовали пакет, решая эту точную проблему.

npm install time-events-manager

С этим вы можете просмотреть их через timeoutCollection & amp; intervalCollection объектов.

0
задан HeisenBerg 18 March 2019 в 16:02
поделиться

2 ответа

У меня был подкласс UICollectionViewFlowLayout для достижения желаемого результата.

private class CustomFlowLayout : UICollectionViewFlowLayout
{
    public override UICollectionViewLayoutAttributes[] LayoutAttributesForElementsInRect(CGRect rect)
    {
        var attributes = base.LayoutAttributesForElementsInRect(rect);

        var leftMargin = SectionInset.Left;
        var maxY = 2.0f;

        var horizontalSpacing = 6f; // spacing between the items.

        foreach (var attribute in attributes) {
            if (attribute.Frame.Y >= maxY || attribute.Frame.X == SectionInset.Left) {
                leftMargin = SectionInset.Left;
            }
            if (attribute.Frame.X == SectionInset.Left)
                leftMargin = SectionInset.Left;
            else
                attribute.Frame = new CGRect(leftMargin, attribute.Frame.Y, attribute.Frame.Width, attribute.Frame.Height);

            leftMargin += attribute.Frame.Width + horizontalSpacing;
            maxY = (float)Math.Max(attribute.Frame.GetMaxY(), maxY);
        }

        return attributes;
    }
}
0
ответ дан HeisenBerg 18 March 2019 в 16:02
поделиться

Вы пытались переопределить LayoutAttributesForElementsInRect в пользовательском UICollectionViewFlowLayout и установить атрибуты. Это происходит, когда UICollectionViewFlowLayout возвращает 2 атрибута для одной ячейки.

public class CustomFlowLayout : UICollectionViewFlowLayout
    {
        public override UICollectionViewLayoutAttributes[] LayoutAttributesForElementsInRect(CGRect rect)
        {
            UICollectionViewLayoutAttributes[]  attributes = base.LayoutAttributesForElementsInRect(rect);
            UICollectionViewLayoutAttributes[]  newAttributes = new UICollectionViewLayoutAttributes[attributes.Length];
            foreach (UICollectionViewLayoutAttributes attribute in attributes)
            {
                if ((attribute.Frame.X + attribute.Frame.Width<= this.CollectionViewContentSize.Width) &&
                    (attribute.Frame.Y + attribute.Frame.Height <= this.CollectionViewContentSize.Height))
                {
                    newAttributes.Append(attribute);
                }
            }
            return newAttributes;
        }

    }

Для более подробной информации вы можете проверить здесь

0
ответ дан pooja 18 March 2019 в 16:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: