UICollectionViewCell ширина больше, чем я установил в sizeForItemAt - PullRequest
0 голосов
/ 29 марта 2019

Ширина / высота моего UICollectionView соответствует всему доступному пространству.

Я хочу отобразить две ячейки в одной строке (два столбца)

Таким образом, ширина одной ячейки должна составлять половину ширины UICollectionView (collectionView.frame.width / 2)

Итак, я программно изменяю ширину ячейки в функции UICollectionViewDelegateFlowLayout:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: collectionView.frame.width / 2.0, height: 150)
}

Но визуально ширина ячейки намного больше, чем collectionView.frame.width / 2.0 (протестировано на симуляторе iPhone SE)

Так что экран занимает больше половины ширины экрана

Здесь я напечатал информацию о размерах:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath)
    print("didSelectItemAt \(cell.frame.width), table width: \(collectionView.frame.width), item calc width: \(collectionView.frame.width / 2)")
}

didSelectItemAt ширина ячейки 187,5, ширина таблицы: 375,0, полуширина: 187,5

enter image description here

Почему это происходит?

Существует также проблема с полями, но сначала я должен решить эту проблему

Обновление

Хотя он отлично работает с симулятором iPhone 6s (я отредактировал изображение, чтобы поместить два элемента в первый ряд, чтобы проверить, подходят ли они):

enter image description here

Так что же не так с iPhone SE?

Я не хочу выяснять, что может быть такая же проблема и с другими iPhone или iPad

Ответы [ 3 ]

1 голос
/ 29 марта 2019

375.0 - это размер iPhone 6s и X, а не iPhone SE, который равен 320.0

.

Причина в том, что существует ограничение ширины collectionView, которое было установлено в режиме iPhone 6s, но позже при переключении на симулятор SE это ограничение не было обновлено.

0 голосов
/ 29 марта 2019

Попробуйте использовать широкий вид, а не collectionView.

Попробуйте это:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: (view.frame.width / 2.0) - 5, height: 150) // provide little bit space between cells
}

Надеюсь, это поможет.

0 голосов
/ 29 марта 2019

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

extension ViewController : UICollectionViewDelegateFlowLayout{

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let collectionViewWidth = collectionView.bounds.width
        return CGSize(width: collectionViewWidth/2, height: 150)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }
}

Кроме того, вы должны проверить ограничение вашего UICollectionView, если оно соответствует вашему требованию или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...