Ширина/высота моего 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
Почему это происходит?
Есть также проблема с полями, но сначала я должен решить эту проблему.
Обновить
Хотя он отлично работает с симулятором iPhone 6s (я отредактировал изображение, поместив два элемента в первый ряд, чтобы проверить, подходят ли они):
Так что же не так с iPhone SE?
Я не хочу знать, что такая же проблема может быть и с другими iPhone или iPad.
sizeForItemAt
, это слишком рано иcollectionView.frame.width
по-прежнему неправильно сообщает размер времени разработки, который был взят из Interface Builder с его текущим установленным устройством. Таким образом, при работе на (симулированном) другом устройстве вы можете увидеть проблему, так как расчет неверен. Вы тоже испытали это? - person superjos   schedule 12.02.2020