我想在此视频(https://developer.apple.com/videos/play/wwdc2016/219/?time=1500)中创建一个Apple视图集合视图,其中每个单元格包含UILabel中的文本单词,如下图所示。
在视频中,他们为UICollectionViewFlowLayoutAutomaticSize
使用了新的estimatedItemSize
常量。
在iOS 10中执行此操作的最佳方法是什么?如何在故事板中使用UICollectionViewFlowLayoutAutomaticSize
?
答案 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,因此单元格与屏幕一样宽)