CollectionViewCell 边距?
Posted
技术标签:
【中文标题】CollectionViewCell 边距?【英文标题】:CollectionViewCell margin? 【发布时间】:2017-11-15 09:46:36 【问题描述】:我有一个UICollectionView
,其中有一些已出列的自定义单元格。正如您从屏幕截图中看到的那样,有一个奇怪的边距,我无法弄清楚这是从哪里来的。棕色/橙色是UICollectionView
,灰色是UICollectionViewCell
。
我正在为该单元格使用 xib 文件,因为我需要许多自定义单元格。
生成UICollectionView
的代码没有任何东西会导致这个边距。
extension DashVC: UICollectionViewDelegate, UICollectionViewDataSource
func numberOfSections(in collectionView: UICollectionView) -> Int
return 1
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PostImageCell", for: indexPath) as! PostImageCell
let post = posts[indexPath.row]
let user = users[indexPath.row]
cell.post = post
cell.user = user
cell.delegate = self
return cell
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return posts.count
func setCollectionViewDelegatesAndRowHeight()
collectionView.dataSource = self
collectionView.delegate = self
更新:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
let width = Int(UIScreen.main.bounds.width)
let height = 407
let size = CGSize(width: width, height: height)
return size
【问题讨论】:
单元格的大小与collectionview的宽度不同!提供collectionViewCell的大小等于collectionview的宽度! 你说的是哪个边距?您的屏幕截图上有几个。 @SaurabhPrajapati 我尝试使用let width = Int(collectionView.frame.width)
,但它仍然不起作用。边距保持
【参考方案1】:
您的UICollectionView
宽度为 375,UICollectionViewCell
宽度为 320。您看到了不同之处。要使单元格与屏幕一样宽,您可以使控制器符合UICollectionViewDelegateFlowLayout
,并实现以下方法:
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
cellHeight = 407.0
CGSize size = CGSizeMake(screenWidth, cellHeight);
return size;
【讨论】:
我试过了,但还是不行。我已经更新了我上面的问题。请看那个。此外,单元格的高度需要是动态的,因为它可能包含也可能不包含超过 1 张照片和/或内容 你可以使用cellForItemAt
得到想要的高度,而不是硬编码为407。至于宽度不起作用,你把它放在extension UICollectionViewDelegateFlowLayout
吗?如果你这样做了,你能不能放置一个断点/调试日志,看看函数是否被调用?
啊,我忘了UICollectionViewDelegateFlowLayout
作为扩展名!这是正确的。我如何获得动态高度?我知道我可以使用cellForItemAt
,但我不确定如何实现。有什么建议吗?
您可以通过调用cell.contentView.frame.size.height
获取indexPath的单元格高度。
嗯,我尝试创建var cellHeight = CGFloat()
,然后为cellForItemAt indexPath
创建cellHeight = cell.contentView.frame.size.height
以获取当前单元格大小,然后使用cellHeight
将其设置为@ 中的高度987654334@ 但它什么也没返回。只有UICollectionView
,没有任何单元格。以上是关于CollectionViewCell 边距?的主要内容,如果未能解决你的问题,请参考以下文章