Почему мой UICollectionView прокручивается вверх при нажатии на ячейку?

Мой UICollectionView всегда прокручивается немного вверх при нажатии на UICollectionViewCell.
Я заметил, что это не происходит, если я установил вставку представления коллекции на 0 (вообще без вставки), а contentInsetAdjustmentBehavior на .never.

Тем не менее, я все еще хочу иметь вставку контента (8 пикселей внизу и вверху) на моем UICollectionView без этой автоматической прокрутки. Я не уверен, почему происходит такое поведение и как оно связано со свойством вставки содержимого.

Есть ли способ иметь пользовательскую вставку, которая не приводит к прокрутке при нажатии UICollectionViewCell?

Это моя конфигурация в viewDidLoad():

self.collectionView?.contentInset = UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0)
// self.collectionView?.contentInsetAdjustmentBehavior = .never
// When setting the contentInset to zero and the contentInsetAdjustmentBehavior to never, it does not scroll

ВК выглядит так:

Каждая ячейка представляет собой сообщение. Вид внизу - inputAccessoryView.

Поведение не возникает, когда я удаляю файл inputAccessoryView. Это также может быть связано с этим обсуждением: https://forums.developer.apple.com/thread/18424


person j3141592653589793238    schedule 18.06.2018    source источник
comment
Какой у вас код в функции didSelectItemAtIndexPath?   -  person Jake    schedule 18.06.2018
comment
Ничего @ Джейк. У меня просто есть пользовательский inputAccessoryView, который находится внизу экрана.   -  person j3141592653589793238    schedule 18.06.2018
comment
У вас есть ограничения?   -  person Jake    schedule 18.06.2018
comment
Для inputAccessoryView? Я сделал. Я добавил изображение в свой ответ, чтобы понять, как выглядит мой контроллер представления. @Jake Это также может быть связано с stackoverflow.com/questions/34081218/. Однако здесь я не выбираю ячейки программно.   -  person j3141592653589793238    schedule 18.06.2018
comment
Я думаю, что вы можете столкнуться с проблемой ограничений между двумя представлениями. Знаете ли вы, как использовать иерархию представления отладки? Я бы проанализировал представления и поля до и после щелчка по ячейке, используя этот инструмент, чтобы увидеть, что происходит.   -  person Jake    schedule 18.06.2018
comment
У меня нет такого опыта использования.. но я узнаю это. Вы говорите об ограничениях между inputAccessoryView и collectionView?   -  person j3141592653589793238    schedule 18.06.2018
comment
Да. Что-то может действовать неожиданным образом   -  person Jake    schedule 18.06.2018
comment
Кажется, это не так, так как я даже не устанавливал ограничения на inputAccessoryView , я просто устанавливал его рамку. inputAccessoryView даже не отображается в отладчике иерархии представлений.   -  person j3141592653589793238    schedule 18.06.2018
comment
Попробуйте установить ограничение на нижнее поле представления коллекции в верхней части inputAccessoryView.   -  person Jake    schedule 18.06.2018
comment
Это не работает, потому что inputAccessoryView добавляется не в viewDidLoad(), а путем переопределения свойства inputAccessoryView.   -  person j3141592653589793238    schedule 18.06.2018
comment
Получите доступ к высоте inputAccessoryView и установите нижнее ограничение CollectionView на нижнюю часть смещения вида на высоту inputAccessoryView. Это должно решить вашу проблему.   -  person Jake    schedule 18.06.2018
comment
@Джейк Вуху! Я действительно потратил слишком много времени и усилий на решение этой незначительной проблемы! Я бы обнял тебя, если бы мог. К сожалению, я не мог изменить ограничения Autolayout для UICollectionView, но я мог изменить его рамку (точнее, его высоту) и уменьшить его на высоту inputAccessoryView. Это работает как шарм. Потрясающий. Если вы хотите ответить на этот вопрос; Я бы принял ваш ответ. Большое спасибо!   -  person j3141592653589793238    schedule 18.06.2018
comment
Спасибо @T.Meyer рад помочь.   -  person Jake    schedule 18.06.2018


Ответы (2)


Ответ - читайте комментарии.

Мое подозрение было проблемы с макетом. Чтобы исправить эту проблему, макет должен быть установлен статически, чтобы он не настраивался при взаимодействии с ним. Обычно это можно было сделать с ограничениями, в этом случае ответом была установка высоты смещения CollectionView на inputAccessoryView.

person Jake    schedule 18.06.2018

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

См. прикрепленное изображение

person Helton Malambane    schedule 04.02.2019
comment
Это решение решило мой случай. Я забыл отключить подкачку после того, как обработал ее сам. - person Oscar Fernandez; 23.07.2020