Для начала, вот иерархия моих представлений:
- Table view
-- Table view cell (loaded from custom xib)
--- Collection view
---- Collection view cell (loaded from custom xib)
----- Custom view (loaded from custom xib)
У меня проблемы с тем, что это последнее представление, пользовательское представление, которое я загружаю в ячейку представления коллекции как пользовательский хиб. По какой-то причине он не имеет правильного размера:
Как вы можете видеть, над панелью вместо гигантского белого пространства вместо правильно заполнив ячейку. Как ни странно, если я прокручиваю вниз представление таблицы, а затем прокручиваю назад вверх, он отображает следующее:
Вот часть код представления моей коллекции:
// I use this to size the collection view cells to be of 16:9 ratio, nothing crazy
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
// Get the width of the screen
let width = UIScreen.main.bounds.width
let imageWidth = width
let imageHeight = imageWidth / (16 / 9)
self.postMediaHeight = imageHeight
return CGSize(width: imageWidth, height: imageHeight)
}
// Here I initialize the cell
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PostMediaCollectionViewCell", for: indexPath as IndexPath) as? PostMediaCollectionViewCell else {
fatalError("The dequeued cell is not an instance of PostMediaCollectionViewCell.")
}
let media = post.images[indexPath.row]
cell.initialize()
return cell
}
Вот класс ячеек представления моей коллекции, PostMediaCollectionViewCell
. Ничего необычного:
class PostMediaCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var container: UIView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var moreView: UIView!
@IBOutlet weak var moreViewLabel: UILabel!
@IBOutlet weak var myCustomView: MyCustomView!
override func awakeFromNib() {
super.awakeFromNib()
}
func initialize() {
//
}
}
И, наконец, вот мой класс для MyCustomView
:
class MyCustomView: UIView {
@IBOutlet var rootView: UIView!
@IBOutlet weak var videoView: VideoView!
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
func initialize() {
Bundle.main.loadNibNamed("MyCustomView", owner: self, options: nil)
addSubview(rootView)
rootView.frame = self.bounds
rootView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
}
Я убедился, что мои ограничения установлены прямо в моем xibs, так что авто макет должен работать, но это явно не так:
PostMediaCollectionViewCell xib: https://i.stack.imgur.com/GQLpj.png
MyCustomView xib: https://i.stack.imgur.com/jpSi0.png
Так что я здесь не так делаю?