如何在iOS 10中自动调整集合查看包含文本的单元格

时间:2016-08-22 10:19:22

标签: ios swift uicollectionviewlayout ios10 xcode8

我想在此视频(https://developer.apple.com/videos/play/wwdc2016/219/?time=1500)中创建一个Apple视图集合视图,其中每个单元格包含UILabel中的文本单词,如下图所示。
在视频中,他们为UICollectionViewFlowLayoutAutomaticSize使用了新的estimatedItemSize常量。 Collection View with text

在iOS 10中执行此操作的最佳方法是什么?如何在故事板中使用UICollectionViewFlowLayoutAutomaticSize

3 个答案:

答案 0 :(得分:3)

您必须创建自己的UICollectionViewFlowLayout子类,并将Storyboard中的Collection View的Flow Layout对象设置为此自定义类,然后在自定义类中编写此代码:

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

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

显然,您必须将应用的目标设置为iOS 10

答案 1 :(得分: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 Cell中的Header可能需要这个方法 并且还要使这个标题的大小,方法:

 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")

答案 2 :(得分:-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,因此单元格与屏幕一样宽)