UICollectionViewController Вставки не корректируются и прокручиваются должным образом - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь использовать UICollectionViewControlller вместе с inputAccessoryView для страницы чата.Я использовал следующий код, чтобы попытаться прокрутить мой collectionViewController до последней ячейки.

self.collectionView.scrollToItem(at: [0, self.messages.count - 1], at: .bottom, animated: true)

и для случая, когда задействована клавиатура

NotificationCenter.default.addObserver(self, selector: #selector(self.handleKeyboardShow), name: UIResponder.keyboardDidShowNotification, object: nil)

@objc func handleKeyboardShow() {
    print("keyboard was called \(messages.count - 1)")
    self.collectionView.scrollToItem(at: [0, messages.count - 1], at: .bottom, animated: true)
}

Это не работает должным образом,фактическая прокручиваемая область кажется слишком маленькой, так как я не могу даже вручную прокрутить до последней ячейки, когда клавиатура открыта.

Вот пример видео LINK

1 Ответ

0 голосов
/ 07 июня 2019

Проблема

Часть UICollectionView ушла под клавиатуру.

Решение

Вам необходимо увеличитьнижнее ограничение между UICollectionView и его суперпредставлением на keyboardDidShowNotification и сжатие на keyboardWillHideNotification.

Шаг за шагом

  • Сохранение нижнего ограничения между UICollectionView и это суперпредставление как свойство в вашем UIViewController классе
  • Измените его высоту на размер клавиатуры на keyboardDidShowNotification
  • Измените его высоту на 0 на keyboardWillHideNotification

Если вы подклассифицировали CollectionViewController

Изменить свойство scrollInset вместо нижнего ограничения.

collectionView.contentInset = UIEdgeInsetsMake(0, 0, 300, 0);

Вместо 300 установите свойВысота клавиатуры, полученная из уведомления.

Если вы захотите перейти от CollectionViewController и воссоздать поведение позже, вот пошаговый процесс

  • ИспользованиеUIViewController вместо
  • Добавить UICollectionView вручную
  • Добавить ограничения вручную, сохранить нижнюю какПодкласс UIViewController
  • устанавливает UICollectionView delegate и dataSource свойства равными self
  • Расширьте ваш UIViewController соответствием протокола (это былоустановлен по умолчанию для CollectionViewController)
  • Повторите шаги с
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...