UICollectionView с точным количеством элементов в строке - значение округления - PullRequest
0 голосов
/ 01 января 2019

Я вычисляю UICollectionView Ячейка itemSize, так что, если счетчик пройден, он вычисляет размер соответственно.

Я рассмотрел sectionInset.left и sectionInset.right, а также minimumInteritemSpacing

При тестировании в iPhone XR я получаю finalW как 124.66666666666667.Это когда numberOfItems передается как 3, левая и правая вставки равны 10 каждая, а минимальный interitemSpacing равен 10.

Проблема здесь в том, что он показывает 2 элемента вместо 3.

Дальнейшая отладкаесли у меня есть объект CGSize (124.666,124.66), он показывает 3 элемента

Но если я оставлю его без изменений, он покажет только 2 элемента.т.е. (124.66666666666667,124.66666666666667)

Не уверен, что расчет неверен или что я делаю неправильно.

   func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return calculateItemSize(numberofItems: 3)
    }

  func calculateItemSize(numberofItems:Int) -> CGSize{

        //Max Width
        let maxW = self.collectionList.frame.width

        let flowLayoutObject = self.collectionList.collectionViewLayout as! UICollectionViewFlowLayout

        //Left and right inset
        let leftInset = flowLayoutObject.sectionInset.left
        let rightInset = flowLayoutObject.sectionInset.right

        //UsableW
        let usableW = maxW - leftInset - rightInset
        let usableWWithSpacing  = usableW  - CGFloat(numberofItems-1)*flowLayoutObject.minimumInteritemSpacing
        let finalW = (usableWWithSpacing) / CGFloat(numberofItems)


        return CGSize(width: finalW, height: finalW)

    }
...