2016-03-02 104 views
1

我使用自動佈局來確定單元格大小(固定爲,變量高度)並在故事板中設置所有必要的約束條件。只要我不改變約束條件,Autolayout就可以正常工作。UICollectionView在更改約束條件後更新單元格

但在運行時我必須添加按鈕到一些單元格。我刪除最後一個標籤的底部約束,插入按鈕並向上面的標籤添加一個約束,一個引導約束到單元格,另一個約束到單元格的底部。

問題是,在此之後單元大小不會更新。我試圖在單元格和集合視圖中調用LayoutIfNeeded,但這不起作用。我認爲這些限制是正確的。該按鈕出現在正確的位置,但單元格僅保持沒有按鈕的單元格的高度。我如何告訴CollectionView更新單元格大小?

+0

你試過'FUNC reloadItemsAtIndexPaths(indexPaths:[NSIndexPath])'? – hzwzw

+0

我試過了:一會兒細胞高度會更新到正確的時刻。但是,然後再次調用cellForItemAtIndexPath,單元高度重置並重新調用reloadItemsAtIndexPaths。它會導致無限的調整大小。 – Superwayne

+0

您在哪種方法中更改約束並添加按鈕? –

回答

0

==>您可以使用UICollectionViewFlowLayout方法的itemSize屬性來設置UICollectionViewCell大小,或者使用委託方法collectionView:layout:sizeForItemAtIndexPath:如果您需要動態設置UICollectionViewCells的大小。

+0

這是以前的方法(手動計算大小並使用sizeForItemAtIndexPath)。但現在它應該是佈局本身。我設定的第一個約束條件很好(每個單元格都有它需要的大小)。但我無法告訴UICollectionView在單元中查找更改的約束。 對於UITableView我做了同樣的事情。在運行時更新約束,然後調用beginUpdates,然後調用endUpdates。這導致tableview更新新約束的行高。我正在尋找類似於UICollectionView的東西。 – Superwayne

1

你可以參考下面的鏈接可能你可以得到你的答案手動和自動大小的UICollectionViewCell。

How make a collectionViewCell auto size only by height?

+0

這對我沒有用,因爲它沒有使用自動佈局。我之前在代碼中做過高度計算,但這不是我的老闆想要的。 – Superwayne

+0

該解決方案使用自動佈局,否則collectionView單元格的子視圖將無法正確顯示。 –

+0

CollectionView沒有任何像tableView擁有高度的概念--UITableViewAutomaticDimension,而不是它,CollectionView工作在UICollectionViewLayout的概念上。默認情況下,collectionView具有UICollectionViewFlowLayout。所以如果你不想使用sizeForItemAtIndexPath,那麼你需要創建自定義佈局。 –

相關問題