Ich spielte mit dynamischen UICollectionViewCells und habe festgestellt, dass auf iOS 8 Aufruf cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
auf einem UICollectionViewCell
eine falsche Breite zurückgibt. Gegenwärtig ist die einzige Problemumgehung, die das behebt, explizit das Hinzufügen einer Breiteneinschränkung, um die Zellbreite zu erzwingen. Der Code unten in einer Zelle Unterklasse verwendet:UICollectionViewCell SystemLayoutSizeFittingSize gibt falsche Breite zurück
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)
}
Ich weiß, dass mit iOS 8 und dynamische UICollectionViewFlowLayout, dass die UICollectionViewCell der content Zwänge anders behandelt aber gibt es etwas, was ich bin hier fehlt? Was muss getan werden, um sicherzustellen, dass systemLayoutSizeFittingSize eine bestimmte Breite in einer Zelle verwendet?
Ich stieß auch auf diesen Beitrag (Specifying one Dimension of Cells in UICollectionView using Auto Layout) und glaube, dies könnte tatsächlich meine Frage ungültig machen. Vielleicht ist UICollectionViewFlowLayout nicht für Zellen mit nur einer dynamischen Dimension ausgelegt, erklärt aber immer noch nicht, warum die Zelle eine ungewöhnliche Breite hat.
Ich habe das exakt gleiche Problem, meine Zellenbreite wird immer als 320 (xib Ansichtsgröße) zurückgegeben. Kann nicht wirklich umgehen ... –
Haben Sie UILabel mit mehreren Zeilen in dieser Zelle? Wenn ja, haben Sie wahrscheinlich die maximale Layoutbreite falsch gewählt. –
@ hrs.to Wenn Sie die Frage erneut lesen, werden Sie sehen, es hat nichts mit Etiketten zu tun, sondern die Größe der gesamten Zelle –