Почему отображается только половина представления коллекции? - PullRequest
0 голосов
/ 28 января 2020

Я использовал MMPlayerView (ссылка GitHub здесь ), чтобы добавить видео в представление коллекции, в представлении коллекции изображение заменяется видео в коде (из демонстрации). Я взял демонстрационный проект MMPlayerView и изменил материал в соответствии со своими потребностями, а затем внедрил его в свой проект, чтобы получить что-то вроде этого шоу в этом видео .

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

enter image description here

Что приводит к тому, что это отображается в приложении (я не понимаю, почему это так далеко от вершины, когда ограничено 10 точками):

enter image description here

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

enter image description here

Что заставило приложение выглядеть так:

enter image description here

Почему ?? Я предполагаю, что это как-то связано с этой частью кода контроллера представления:

extension HomeViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let m = min(UIScreen.main.bounds.size.width, UIScreen.main.bounds.size.height)
    return CGSize(width: m, height: m*0.75)
}

Я хочу, чтобы ширина представления коллекции была такой же, как ширина представления, поэтому ширина в порядке, просто высота здесь. Когда я пытаюсь установить высоту на постоянное значение 250 (то же самое, что ограничение высоты), он делает то же самое (показывает только половину), но немного сжимает видео. Что я могу изменить?

1 Ответ

1 голос
/ 28 января 2020

Быстрый просмотр приложения «Пример» из MMPlayerView ...

Измените значение высоты в sizeForItemAt на высоту представления вашей коллекции (250 для вашего вопроса):

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let m = min(UIScreen.main.bounds.size.width, UIScreen.main.bounds.size.height)
    return CGSize(width: m, height: 250.0)
    //return CGSize(width: m, height: m*0.75)
}

Я предполагаю, что вы получили те же сообщения об ошибках в консоли отладки, что и я:

Поведение UICollectionViewFlowLayout не определено, поскольку:

высота элемента должна быть меньше высоты UICollectionView минус верхние и нижние значения вставок раздела, минус верхние и нижние значения вставок содержимого.

, а также должны быть напечатаны свойства представления коллекции в том числе:

AdjustContentInset: {0, 0, 200, 0};

Таким образом, представление коллекции имеет нижнюю вставку 200.

Если Вы ищете этот пример проекта для contentInset, вы найдете эту строку в функции viewDidLoad() контроллера представления:

playerCollect.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 200, right:0)

Если вы закомментируете / удалите эту строку, вы должны увидеть полную ячейку .

Может быть хорошим Идея сначала получить представление о коллекциях, а , а затем просмотреть этот пример проекта для реализации видео в вашем приложении.

...