![](/img/trans.png)
[英]Resize images automatically in CollectionViewCell in CollectionView with Auto Layout
[英]Auto Layout size of CollectionViewCell in relation to CollectionView
我在 CollectionView 中放置了一個 CollectionViewCell。 CollectionView 的大小是通過自動布局設置的,並且可以不時更改。
我想(以編程方式)在我的 CollectionView 上設置約束,以便 CollectionViewCell 的大小響應於 CollectionView 的大小(假設 Cell 的寬度等於 CollectionView-100 的寬度並且高度應該相等)。
如何聲明 Cell 和 CollectionView 之間的約束?
何時、何地以及如何設置這些約束? 當 CollectionView 的大小發生變化時,我是否必須在單元格上調用 setNeedsLayout ?
我搜索了很長時間,我發現的總是關於根據內容更改單元格的大小——這不是我想要做的。 我得到的唯一提示是我可能必須繼承 CollectionViewLayout - 但我不確定這一點。
任何幫助表示贊賞!
您無法使用約束來實現這一點,但是您可以使用UICollectionViewDelegate
的sizeForItemAtIndexPath
方法輕松地做到這一點。 例子:
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: collectionView.frame.size.width / 2, height: collectionView.frame.size.height/ 2)
}
在更改collectionView
大小后,您需要做的就是調用其reloadData
方法。
我可以為您建議兩種方法來做到這一點:
viewDidLayoutSubviews
方法中設置collectionViewLayout
屬性。 我不確定當屏幕方向改變時它是否有效。- (void)viewDidLayoutSubviews
{
UICollectionViewFlowLayout *flow = YOUR_COLLECTION_VIEW.collectionViewLayout;
float width = CGRectGetWidth(YOUR_COLLECTION_VIEW.frame)-100.f;
float height = CGRectGetHeight(YOUR_COLLECTION_VIEW.frame);
YOUR_COLLECTION_VIEW.collectionViewLayout = flow;
}
(void)layoutSubviews
在UICollectionViewDelegateFlowLayout
sizeForItemAt
方法中設置單元格高度並獲取集合視圖高度。 如果更合適,您可以根據整數設置單元格大小或乘以百分比。
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout, sizeForItemAt
indexPath: IndexPath) -> CGSize {
let heigh = collectionView.frame.height
let widthOfCell = collectionView.frame.width - 100 // OP request
return CGSize(width: width, height: height)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.