2017-08-08 43 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來設置它。但它沒有幫助。 –

相關問題