UICollectionViewCell собственного размера с фиксированной высотой / шириной - PullRequest
2 голосов
/ 20 июня 2019

Итак, у меня есть это представление коллекции со смешанными ячейками собственного размера и ячейками фиксированного размера.Это прекрасно работает для самих себя, но я не могу заставить фиксированные размеры оставаться фиксированными.Вот что я делаю:

// I have a viewContainer inside the cell's contentView
let viewContainer = UIView()
viewContainer.backgroundColor = .red
viewContainer.translatesAutoresizingMaskIntoConstraints = false
self.contentView.addSubview(viewContainer)

// This viewContainer has a fixed width/height and is achored to the top, left, right, bottom of the contentView
viewContainer.topAnchor.constraint(equalTo: self.contentView.topAnchor).isActive = true
viewContainer.leftAnchor.constraint(equalTo: self.contentView.leftAnchor).isActive = true
viewContainer.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor).isActive = true
viewContainer.rightAnchor.constraint(equalTo: self.contentView.rightAnchor).isActive = true
viewContainer.heightAnchor.constraint(equalToConstant: FIXED_HEIGHT).isActive = true
viewContainer.widthAnchor.constraint(equalToConstant: FIXED_WIDTH).isActive = true

// Then I got my ImageView (property of my cell), as a viewContainer subview
self.photoImageView.translatesAutoresizingMaskIntoConstraints = false
self.photoImageView.contentMode = .scaleAspectFill
viewContainer.addSubview(self.photoImageView)

// It has a fixed width/height and is achored to the top, left, right, bottom of the viewContainer
self.photoImageView.topAnchor.constraint(equalTo: viewContainer.topAnchor).isActive = true
self.photoImageView.leftAnchor.constraint(equalTo: viewContainer.leftAnchor).isActive = true
self.photoImageView.bottomAnchor.constraint(equalTo: viewContainer.bottomAnchor).isActive = true
self.photoImageView.rightAnchor.constraint(equalTo: viewContainer.rightAnchor).isActive = true
self.photoImageView.heightAnchor.constraint(equalToConstant: FIXED_HEIGHT).isActive = true
self.photoImageView.widthAnchor.constraint(equalToConstant: FIXED_WIDTH).isActive = true

Каким-то образом, когда у меня были изображения (из средства выбора изображений, с простой перезагрузкой данных в делегате), размер ячейки изменяется, размер изображения:

unwanted self sized cell

Но после быстрой прокрутки вверх и вниз на collectionView все выглядит хорошо:

right sized cell

Я устал добавлять высокий приоритет к методу heightAnchor и withAnchor UILayoutPriority(999.0), но, похоже, это не помогает.Я не могу найти способ изменить размер этой ячейки и изображение ячейки так, как я хочу.Я чувствую, что это связано с изображением внутри изображения, но я не понимаю, как и почему это происходит.Может ли кто-нибудь помочь мне с этим?

Заранее спасибо за ваши ответы.

РЕДАКТИРОВАТЬ: Я также попытался создать подкласс UIImageView и переопределить intrinsicContentSize, чтобы он возвращал размер, который я хотелбыть, но все равно безуспешно: /

1 Ответ

0 голосов
/ 20 июня 2019

Не уверен, что это лучшее решение, но я прекратил добавлять ограничения ширины / высоты в contentView ячейки с приоритетом 999.У меня все еще есть предупреждения Autolayout.Но, похоже, работает "хорошо".

...