UICollectionViewCell systemLayoutSizeFittingSize возвращает неверную ширину

Я играл с динамическими UICollectionViewCell и заметил, что на iOS 8 вызовcell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) наUICollectionViewCell возвращает неверную ширину. В настоящее время единственный обходной путь, который обращается к этому, состоит в том, чтобы явно добавить ограничение ширины, чтобы принудительно установить ширину ячейки. Приведенный ниже код используется в подклассе Cell:

func calculatePreferredHeightForFrame(frame: CGRect) -> CGFloat {
    var newFrame = frame
    self.frame = newFrame
    let widthConstraint = NSLayoutConstraint(item: contentView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: CGRectGetWidth(frame))
    contentView.addConstraint(widthConstraint)
    self.setNeedsUpdateConstraints()
    self.updateConstraintsIfNeeded()
    self.setNeedsLayout()
    self.layoutIfNeeded()
    let desiredHeight: CGFloat = self.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
    newFrame.size.height = CGFloat(ceilf(Float(desiredHeight)))
    contentView.removeConstraint(widthConstraint)
    return CGRectGetHeight(newFrame)
}

Я знаю, что с iOS 8 и динамическим UICollectionViewFlowLayout, что contentView UICollectionViewCell обрабатывает ограничения по-разному, но есть ли что-то, что я здесь упускаю? Что нужно сделать, чтобы systemLayoutSizeFittingSize использовал определенную ширину в ячейке?

Я тоже наткнулся на этот пост (Указание одного измерения ячеек в UICollectionView с использованием автоматического макета) и считаю, что это может фактически сделать мой вопрос недействительным. Возможно, UICollectionViewFlowLayout не предназначен для ячеек с одним динамическим измерением, но это все еще не объясняет, почему ячейка дает необычную ширину.

Ответы на вопрос(0)

Ваш ответ на вопрос