Dinamik UICollectionViewCell'in ile oynuyordum ve bir UICollectionViewCell
numaralı telefonda cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
numaralı telefonun hatalı bir genişlik döndürdüğünü fark ettim. Şu anda bunu ele alan tek geçici çözüm, hücrenin genişliğini zorlamak için bir genişlik kısıtlaması açıkça eklemektir. Aşağıdaki kod, bir Hücre alt sınıfta kullanılır:UICollectionViewCell systemLayoutSizeFittingSize, yanlış genişlik döndürüyor
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)
}
Ben iOS 8 ve dinamik UICollectionViewFlowLayout ile UICollectionViewCell en contentView farklı kısıtlamaları kolları ama orada ben burada özlüyorum şey olduğunu biliyoruz? SystemLayoutSizeFittingSize'in bir hücrede belirli bir genişlik kullanmasını sağlamak için ne yapması gerekir?
Ayrıca bu yazıya rastladım (Specifying one Dimension of Cells in UICollectionView using Auto Layout) ve bunun aslında sorumu geçersiz kılabileceğine inanıyorum. Belki de UICollectionViewFlowLayout, yalnızca tek bir dinamik boyuta sahip hücreler için tasarlanmamıştır, ancak bu, hücrenin neden sıra dışı bir genişlik sağladığını açıklamamaktadır.
Tam olarak aynı sorun var, benim hücre genişliğim her zaman 320 (xib görünüm boyutu) olarak döndürülür. Gerçekten bu konuda çalışamıyorum ... –
Bu hücrede çok çizgili UILabel var mı? Eğer öyleyse muhtemelen tercih ettiğiniz maksimum düzen genişliğine sahip olursunuz. –
@ hris.to soruyu tekrar okursanız, bunun etiketlerle değil, tüm hücreyi –