代码之家  ›  专栏  ›  技术社区  ›  alessionossa

如何在iOS 10中自动调整包含文本的“收藏视图”单元格的大小[已关闭]

  •  0
  • alessionossa  · 技术社区  · 8 年前

    我想在这个视频中制作一个类似苹果制作的收藏视图( https://developer.apple.com/videos/play/wwdc2016/219/?time=1500 )其中每个单元格包含UILabel中文本的一个单词,如下图所示。
    在视频中,他们使用新的 UICollectionViewFlowLayoutAutomaticSize 的常量 estimatedItemSize . Collection View with text

    在iOS 10中,最好的方法是什么?我如何使用 UI集合视图流布局自动大小 用故事板?

    3 回复  |  直到 8 年前
        1
  •  3
  •   user6583462 user6583462    8 年前

    您必须创建自己的子类 UICollectionViewFlowLayout 并将情节提要中“集合视图”的“流布局”对象设置为此自定义类,然后在自定义类中编写以下代码:

    override init() {
        super.init()
        estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    

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

        2
  •  0
  •   MAGiGO    8 年前
    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")
    
        3
  •  -1
  •   Mirza Alagić    8 年前

    试试这个:

    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,所以单元格与屏幕一样宽)