2015-09-29 2 views
1

Я создаю коллекцию. Я изменить размер и положение ячейки в CollectionViewController:indexPathForItemAtPoint с пользовательским фреймом ячейки

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath 
indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(
reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell 

, а затем изменить cell.frame для каждого отдельного элемента

 cell.frame = CGRectMake(x , y, width, height) 

Это все работает нормально, но при использовании жест распознаватель, я хочу, чтобы идентифицировать клетки используя collectionView.indexPathForItemAtPoint().

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

ответ

1

Причина, по которой вы видите это, заключается в том, что UICollectionView не использует фактическую иерархию представления для ответа на заданный вами вопрос. UICollectionView имеет объект макета, соответствующий названию UICollectionViewLayout. Объект компоновки по умолчанию - UICollectionViewFlowLayout. Когда вы запрашиваете ячейку в точке, она использует информацию, предоставленную объектом макета.

Вот важный бит: если вы хотите позиционировать ячейки по-разному, чем это делает макет потока, вам необходимо подклассифицировать его или базовый класс и реализовать свои собственные методы макета. Кроме того, вы можете получить объект Flow Layout по умолчанию в синхронизации с вашими изменениями. Я не уверен.

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

+0

Спасибо, я посмотрю на это! – ceed

Смежные вопросы