我正在尝试创建如下的UI。
为此目的,我正在使用UICollectionView
和FlowLayout
。
为了显示全宽的第一个单元格和剩余单元格为3列,我实现了sizeForItemAtIndexPath:
和minimumInteritemSpacingForSectionAtIndex
方法:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
var cellSize = CGSizeZero
if indexPath.item == 0
{
let width = self.cvMedia.frame.width - 20
let height = (width * 9)/16
cellSize = CGSize(width: width, height: height)
}
else
{
let width = self.cvMedia.frame.width / 3 - 20
let height = (width * 16)/9
cellSize = CGSize(width: width, height: height)
}
return cellSize
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat
{
return 20.0
}
但是我在iPhone 6SPlus和iPhone 6Plus中获得了以下输出:
我尝试将项目间距从20更改为19并且它在模拟器上工作,但在实际设备上它仍然显示相同的行为。如果我更改间距值,我会在某些设备版本上获得正确的输出,而不是在某些版本上工作。我可以添加设备版本检查,并根据我可以返回值。但它不是一个优雅的解决方案,它将在未来的版本中打破。任何人都可以帮我解决这个问题吗?提前谢谢。
答案 0 :(得分:1)
在进行此布局时,您应该使用集合视图的宽度作为参数。
例如,
<强>解决方案:强>
在viewWillAppear()或cellForRowAtIndexPath()
上计算运行时单元格的大小<强>情境:强>
设备宽度为320pt。 Collectionview的宽度为300pt(间隔10pt L&amp; R)间距:单元之间为20pt。 Cell需要3 !! 细胞大小:?
现在......以任一方法开始计算。
细胞间距=(3-1)* 20 = 2 * 20 = 40pt
剩余集合视图宽度= 300pt - 40pt = 260pt
细胞大小= 260pt / 3 = 86.667 pt。 (86pt apprx)。
代码:
cellWidth = ( collectionView?.bounds.width - minimumSpacing * (numberOfCellsInARow - 1 ) ) / numberOfCellsInARow
另外,这只给出了cellWidth。你也需要cellHeight。 您可能已经拥有该单元格的宽高比。使用它,也可以计算cellHeight。
亲切的问候,
Suman Adhikari
答案 1 :(得分:0)