2016-08-22 7 views
0

Я хочу сделать сборку, подобную той, которую сделал Apple в этом видео (https://developer.apple.com/videos/play/wwdc2016/219/?time=1500), где каждая ячейка содержит слово текста в UILabel, например, в следующее изображение.
В видео они используют новую константу UICollectionViewFlowLayoutAutomaticSize для estimatedItemSize. Collection View with textКак я могу автоматизировать размер коллекции Просмотреть ячейку, содержащую текст в iOS 10

Каков наилучший способ сделать это в iOS 10? Как я могу использовать UICollectionViewFlowLayoutAutomaticSize с раскадровки?

+0

Извините, если я допустил некоторые ошибки на этом языке, я итальянский студент – ale00

+3

Этот вопрос в основном основан на мнениях, слишком широкий и не хватает [минимального, полного и проверяемого примера] (http://stackoverflow.com/help/mcve) или любой попытки решить проблему с помощью OP. – JAL

ответ

3

Вы должны создать свой собственный подкласс UICollectionViewFlowLayout и установить объект Layout Flow вашей коллекции Просмотр в раскадровке к этому пользовательскому классу, затем записать этот код в пользовательском классе:

override init() { 
    super.init() 
    estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

Очевидно, что вы должны установить цель вашего приложения к прошивке 10

+0

Как вы можете достичь того же в iOS 9? – ArielSD

0
override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind 
kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 

    let header = collectionView.dequeueReusableSupplementaryViewOfKind(kind,  
    withReuseIdentifier: "headerId", forIndexPath: indexPath) 

    return header 
} 

Может быть вам нужен этот метод для заголовка в вашей UICollectionView клетки А также, чтобы размер этого заголовка, метод:

func collectionView(collectionView: UICollectionView, layoutcollectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: view.frame.width, height: 50) 
} 

И если у вас есть свой собственный класс заголовка, убедитесь, у зарегистрировать его в viewDidLoad

collectionView?.registerClass(HeaderCell.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "headerId") 
+0

Извините, я не понимаю вашего ответа. Я отредактировал вопрос, чтобы лучше объяснить мою ситуацию @blinkmeoff – ale00

+0

, если вы хотите иметь заголовок для каждой ячейки, такой как Apple, вы можете использовать те методы, которые я вам показал. – blinkmeoff

+0

Для каждой ячейки нет заголовка. ячейки представления коллекции являются отдельными словами – ale00

-1

Попробуйте это:

func collectionView(collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    // Calculating size of string for given fontsize 
    let text = someDataArray[indexPath.row] 
    let font = UIFont.boldSystemFontOfSize(15) // use your font size 
    let attributedText = NSAttributedString(string: text, attributes: [NSFontAttributeName : font]) 
    let height = attributedText.boundingRectWithSize(CGSizeMake(self.view.bounds.width, CGFloat.max), options: [NSStringDrawingOptions.UsesFontLeading, NSStringDrawingOptions.UsesLineFragmentOrigin], context: nil).height 
    let size = CGSize(width: self.view.bounds.width, height: height) 
    return size 
} 

Функция вычисляет высоту ячейки для заданной строки, размера и ширины шрифта. (Я использовал self.view.bounds.width, так что ячейка такая же широкая, как и экран)

 Смежные вопросы

  • Нет связанных вопросов^_^