Высота ячейки CollectionView не изменяется автоматически - PullRequest
0 голосов
/ 16 января 2019

Итак, я столкнулся с некоторыми проблемами с UICollectionView, который есть в моем проекте Xamarin для iOS.

Ячейки для CollectionView не расширяются с меткой в ​​них. У метки в ячейке строк установлено значение 0 и следующие ограничения:

  • (сверху, снизу, впереди, сзади) к суперпредставлению

  • Высота> = 10

В моем ViewDidLoad () Я настроил CollectionView следующим образом:

var source = new CustomCollectionViewSource(collectionView);
        collectionView.Source = source;
        collectionView.SetCollectionViewLayout(new UICollectionViewFlowLayout()
        {
            ScrollDirection = UICollectionViewScrollDirection.Vertical,
            EstimatedItemSize = new CGSize(collectionView.Frame.Width, 10)
        }, false);

        var set = this.CreateBindingSet<MainViewController, MainViewModel>();
        set.Bind(source).For(v => v.ItemsSource).To(vm => vm.DataSource);
        set.Apply();

и мой CollectionViewSource

 public class CustomCollectionViewSource : MvxCollectionViewSource
{
    public IList<Item> Messages { get; set; }

    public override void ReloadData()
    {
        var list = (ItemsSource as IEnumerable<Item>).ToArray();
        Messages = list;
    }

    public CustomCollectionViewSource(UICollectionView collectionView) : base(collectionView)
    {
        collectionView.RegisterNibForCell(CustomCollectionViewCell.Nib, CustomCollectionViewCell.Key);
    }

    public override UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
    {
        var cell = collectionView.DequeueReusableCell(CustomCollectionViewCell.Key, indexPath) as CustomCollectionViewCell;
        cell.DataContext = Messages.ElementAtOrDefault(indexPath.Row);

        return cell;
    }
}

Я пытаюсь, чтобы ячейки были шириной представления коллекции и чтобы высота была гибкой; однако всякий раз, когда я заполняю клетки, я всегда получаю что-то вроде этого: UICollectionView Cells that are cutoffenter image description here Ячейки обрезаны и имеют в конце эллипсы. Я читал в Интернете, что ограничения должны быть правильными для динамического изменения размера, так что я что-то упускаю?

Я также прочитал, что для получения вычисленной высоты для каждой ячейки я могу загрузить кончик ячейки, заполнить ее, а затем установить размер вручную в пользовательском UICollectionViewDelegate. Классная идея, но я мог найти любые рабочие примеры для Xamarin iOS.

Пожалуйста, дайте мне знать, если что-то мне не хватает, или любую другую информацию, которая вам требуется. Заранее спасибо!

1 Ответ

0 голосов
/ 16 января 2019

1. Сделайте так, чтобы ваш ярлык поддерживал несколько строк

textLabel.LineBreakMode = UILineBreakMode.WordWrap;
textLabel.Lines = 0;  

2. Установите расчетную высоту ячейки

cell.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize

На заметку:

  • Чтобы определить высоту ячейки, вам нужна непрерывная цепочка
    ограничения и виды (с заданными высотами) для заполнения области
    между верхним краем представления контента и его нижним краем.

  • Если ваши представления имеют внутреннюю высоту содержимого, система использует эти ценности. Если нет, вы должны добавить соответствующие ограничения высоты, либо к представлениям, либо к представлению содержимого.

...