В моем приложении Swift
я использую UICollectionView
. Каждый UICollectionViewCell
содержит UILabel
, и в какой-то момент я заполняю эти метки разными строками из моего массива. Тем не менее, строки имеют разную длину, поэтому я хотел бы отображать их с правильным размером. В настоящее время я использую эти два метода:
Почему я не могу изменить ширину моего UICollectionViewCell на основе длины ярлыка внутри?
private func estimateFrameForText(text: String) -> CGRect {
//we make the width arbitrarily large so we don't undershoot height in calculation
let width: CGFloat = 200
let size = CGSize(width: width, height: 33)
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
let attributes = [NSFontAttributeName: font]
return NSString(string: text).boundingRect(with: size, options: options, attributes: attributes, context: nil)
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
var width: CGFloat = 200
//we are just measuring width so we add a padding constant to give the label some room to breathe!
var padding: CGFloat = 1
//estimate each cell's width
if let text = self.suggestedHashtags[indexPath.item] as? String {
width = estimateFrameForText(text: text).width + padding
}
return CGSize(width: width, height: 35)
}
, но он не работает, клетки остаются теми же размерами. Что мне не хватает?
ли вы показать свой вывод, что вы достичь и что вы на самом деле хотите. поэтому у нас появилась идея –