UICollectionView无法提供项目大小

时间:2017-12-11 17:38:51

标签: ios uicollectionview uicollectionviewlayout

我正在为我的应用创建一个日历,其中每个月都是嵌入在UITableView单元格内的UICollectionView。 TableView被固定到屏幕的安全区域,因此其前导和尾随约束等于屏幕左右边缘的16。 UICollectionView固定到表格单元格的ContentView。

CollectionView中项目和项目行之间的间距以及部分插入都设置为0.因此,为了连续7天,我使用itemWidth = tableView.frame.width / 7。然后我在sizeForItem()协议的DelegateFlowLayout方法中将此值设置为宽度和高度。

在运行时,所有值都正确计算:例如,在iPhone 8屏幕上,tableView宽度为343,itemWidth为49,itemSize为(49,49)。但在屏幕上看起来像这样:

enter image description here

这是iPhone SE结果:

enter image description here

我尝试以编程方式设置布局间距,但它没有帮助。任何人都可以解释我在哪里是愚蠢的,以及7个相同的部分如何在屏幕上变成8或6?

更新即可。我试图从ViewController的主视图中计算宽度:itemWidth = (view.frame.width-32) / 7(其中32是安全区域插入的总和 - 2 * 16)。仍然没有间距,这解决了较大屏幕的问题,如8或8plus,但SE仍显示一周6天,并强制项之间的间隔。在这一点上,我对布局逻辑一无所知!

1 个答案:

答案 0 :(得分:0)

根据我的理解,经过2天的研究,将不同的屏幕宽度除以7可能会导致浮点结果的模糊性。在SE的320点屏幕上,必须有一个0.00000001,它不允许在没有间距的情况下容纳7个相同大小的单元格。

所以对我来说,一个解决方法是将生成的itemWidth:

放在一起
itemWidth = CGFloat(floor(Double(view.frame.width-32) / 7))

这为所有屏幕尺寸提供了可预测的结果 - 现在每周都有7天。