Swift iOS — как обрезать горизонтальные ячейки CollectionView, когда они собираются выйти за границы экрана

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

Поскольку существуют разные размеры экрана, такие как iPhone 4/5/6/7/iPad и т. д., я не хочу указывать точное количество отображаемых элементов. Вместо этого я хочу урезать количество элементов в зависимости от размера экрана, например. На iPhone 7+ в классе размеров .compact на экране может поместиться не менее пяти ячеек, но на iPhone 4 на экране могут разместиться только три ячейки, а на iPad, вероятно, 20 ячеек.

Я думаю, я бы сделал что-то вроде этого:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    //I know this is comparing an Int to a CGRect and it won't work
    if items.count > UIScreen.main.bounds.width{
         //stop count and display truncation dots ...
    }
    return self.items.count
}

Как бы я это сделал?


person Lance Samaria    schedule 25.06.2017    source источник


Ответы (1)


Для этого вам необходимо реализовать метод протокола

collectionView(_ collectionView: UICollectionView, 
                  layout collectionViewLayout: UICollectionViewLayout, 
           sizeForItemAt indexPath: IndexPath) -> CGSize

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

person Jonathanff    schedule 25.06.2017
comment
спасибо попробую. Как бы я отображал точки усечения ...? Я подумал, может быть, у меня есть определенная ячейка t, в которой уже есть точки, и когда ячейки приближаются к границам экрана, усеченная ячейка отображается последней. Разве есть лучший способ? - person Lance Samaria; 25.06.2017
comment
Добавляя комментарий к моему ответу, вам нужно будет рассчитать, на каком экране вы должны вернуть количество элементов в разделе, которое вы хотите, в зависимости от экрана, а затем добавить последнюю строку для отображения точек. - person Jonathanff; 25.06.2017
comment
Спасибо попробую - person Lance Samaria; 25.06.2017