Автоматическое изменение размера ячейки UICollectionView, встроенной в UITableView, не работает - PullRequest
0 голосов
/ 05 марта 2019

Я потратил несколько дней на то, чтобы опробовать предложения, предложенные на разных постах SO, но не смог этого выяснить.Я, вероятно, смотрю прямо на проблему!

Я переключаюсь с Android на iOS и, похоже, у меня возникли некоторые проблемы с автопоставкой.В частности, получение UICollectionView для изменения размера до высоты его содержимого.Каждое представление коллекции может иметь различный размер ячейки в зависимости от его содержимого, но размер ячейки будет одинаковым для каждого элемента в данной строке.

UICollectionView вложен в UITableViewCell.Кажется, что UITableViewCells корректно изменяют высоту своего содержимого и, глядя на иерархию представлений отладки, проблема, похоже, связана с UICollectionView.

Я создал мини-демонстрацию и поместил ее на этот github (ссылка ниже).Я добавил кучу тестовых данных, поэтому нижняя часть ViewController VC немного грязная.Демо просто показывает, как каждая строка может иметь разный размер контента.Может быть несколько строк таблицы одного и того же стиля.

ПРИМЕЧАНИЕ. Мне нужно было добавить следующую строку в CategoryRowCell.swift, чтобы получить снимки экрана ниже.Без этой строки высота UICollectionView становится равной 0!

...
collectionView.heightAnchor.constraint(equalToConstant: 250)
...

ссылка на GitHub

Так вот как это выглядит прямо сейчас ..

Initial screen

прокручивается вниз

scrolled

Обратите внимание на пробелы вверху и внизу горизонтальных списков.Вот то, что я ожидаю ..

Expected Layout

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

Debug View Hierarchy

1 Ответ

0 голосов
/ 05 марта 2019

Я думаю, что было бы лучше сделать это наоборот, имея UICollectionView в качестве родителя и UITableView в качестве дочернего. Поскольку первое более гибкое и настраиваемое.

В любом случае для вашего случая, я думаю, вам нужно взглянуть на две вещи:

1 - Чтобы лучше контролировать размер ячейки, вы можете использовать эту функцию для UICollectionView:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize { 

  // The desired size based on the value at that row (the name for example)

  if objects[indexPath.row].name == "some condition" {
    return CGSize(width: 150, height: 50)
  }
  else {
    return CGSize(width: UIScreen.main.bounds.width, height: 75)
  }


}

2 - значения инспектора размера для UICollectionView и UITableView (в одном из них может быть дополнительный интервал)

UICollectuinView UITableView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...