2017-08-08 42 views
0

我想建立一个UICollectionView有自我大小的UICollectionViewCells。我使用的是UICollectionView而不是UITableView,因为我想要在iPhone上使用列表视图和在iPad上使用网格视图。自我大小UICollectionViewCell

我设置一个示例项目位置: https://github.com/kaler/SelfSizingCollectionView

这可能是最简单的代码。从Storyboard加载的UICollectionView。有一个UICollectionViewCell和一个UILabel。 UILabel具有将它固定到单元边缘的限制。

UICollectionView有一个UICollectionViewFlowLayout。如果我将itemSize设置为UICollectionViewFlowLayoutAutomaticSize,则会出现约束错误。

这是我所看到的截图: Cell doesn't self size

在ViewController中的代码是非常简单的:

class ViewController: UIViewController, UICollectionViewDataSource { 

    // MARK: - Outlets 

    @IBOutlet weak var collectionView: UICollectionView! 
    @IBOutlet weak var collectionViewFlowLayout: UICollectionViewFlowLayout! 

    // MARK: - view lifecycle 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if #available(iOS 10.0, *) { 
      // This causes constaint errors. 
      //   collectionViewFlowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize 
      //   collectionViewFlowLayout.estimatedItemSize = CGSize(width: 300, height: 50) 
     } else { 
      // Fallback on earlier versions 
     } 
    } 

    // MARK: - UICollectionViewDataSource 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 10 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ItemCell", for: indexPath) 

     guard let itemCell = cell as? ItemCell else { 
      return cell 
     } 

     itemCell.label.text = "blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah" 

     return cell 
    } 
} 
+0

你可以发布你正在得到的错误吗?你试过在单元格/标签上设置'translatesAutoresizingMasksIntoConstraints'为'false'吗? – Losiowaty

+0

在故事板中将'translatesAutoresizingMasksIntoConstraints'设置为false。我没有看到任何约束错误。 –

+0

当我添加'collectionViewFlowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize'然后我得到: '的UICollectionViewFlowLayout的行为没有定义的,因为: 项目宽度必须小于UICollectionView减去离开了部分插图和正确的价值观的宽度,减去内容插入左右值。 –

回答

0

在viewDidLoad中添加此行()。

self.automaticallyAdjustsScrollViewInsets = false 
+0

我不得不改变我的ViewController从UICollectionViewController继承而不是UIViewController来设置它。但它没有帮助。 –

相关问题