Ответ 1
Похоже, он по-прежнему сохраняет базовый размер 100x100px для contentView, а сама ячейка уже имеет нужный размер. Вы можете заставить макет reset добавить следующую строку непосредственно перед возвратом ячейки:
cell?.layoutIfNeeded()
Я добавил a UICollectionView
в мой UIViewController
и сделал для него специальную ячейку.
Я устанавливаю размер ячейки с помощью метода sizeForItemAtIndexPath
и устанавливаю каждую ячейку как UIScreen.mainScreen().bounds.width/2
как по высоте, так и по ширине. По существу, каждая ячейка имеет ширину в полтора экрана и такую же длину по высоте.
Затем у меня есть UIImageView
внутри ячейки с каждым ребром, прикрепленным к его относительному краю ячейки, чтобы изображение отображало ячейку. У меня также есть UILabel
, который центрируется как по вертикали, так и по горизонтали в ячейке.
Однако при первой загрузке ячейка имеет правильный размер, но содержимое намного меньше на крошечном квадрате в верхнем левом углу. (Видно на изображении ниже, я установил цвет содержимого ячейки contentView в зеленый цвет, а цвет фонового изображения - красный).
Затем после небольшой прокрутки (и я предполагаю, что повторно используемая ячейка будет удалена) все ячейки в порядке (и остаются без изменений после прокрутки).
Что вызывает неправильное ограничение содержимого при первой загрузке?
UPDATE
Некоторые из кода из моего UIViewController
:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("PrevDrawCell", forIndexPath: indexPath) as? PrevDrawCell
if cell == nil {
cell = PrevDrawCell()
}
cell!.drawVC = self
cell!.imageShortCode = self.tempImageURLs[indexPath.row]
// Pull image (async) and set after download
cell!.setupImage()
cell!.contentView.backgroundColor = UIColor.greenColor()
cell!.coverView.backgroundColor = UIColor.redColor()
cell!.dateLabel.font = UIFont(name: "HelveticaNeue-Light", size: 26)
cell!.dateLabel.text = "\(self.tempImageURLs.count-indexPath.row)/9"
return cell!
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let size = UIScreen.mainScreen().bounds.width/2
return CGSize(width: size, height: size)
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
return UIEdgeInsetsZero
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0
}
Похоже, он по-прежнему сохраняет базовый размер 100x100px для contentView, а сама ячейка уже имеет нужный размер. Вы можете заставить макет reset добавить следующую строку непосредственно перед возвратом ячейки:
cell?.layoutIfNeeded()
У меня была некоторая аналогичная проблема (содержимое моей ячейки не соответствовало ячейке даже при правильном автозапуске). Ошибка была вызвана не вызовом
super.layoutSubviews()
в overriden function layoutSubviews(), который был в классе Cell.