SWIFT - 集合查看单元格大小

时间:2016-04-04 21:55:53

标签: ios swift uicollectionview

我有一个应用程序,它使用来自网络的照片并将它们放入集合视图中。

在集合视图中,我有3行单元格1:1大小,从屏幕宽度/ 3计算。

每件事情都很好但是有一件事情,对于前者来说。 iphone 6s +细胞都紧密地聚在一起,没有任何间距。但是在iphone 5s上我在单元格之间得到了一些间距,只是在屏幕截图上的垂直方式。

iPhone 6s+ Screenshot

iPhone 5s Screenshot

有一些代码:

let screenSize: CGRect = UIScreen.mainScreen().bounds

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
    return CGSize(width: screenSize.width / 3, height: screenSize.width / 3)
}

我还检查过它是否是图像查看问题,但事实并非如此。

我可以做些什么来消除这些间距?

4 个答案:

答案 0 :(得分:1)

执行原始求和,将其向下舍入并乘以列数。

collectView的帧宽调整为此值,然后单元格宽度将始终完美地适合视图。

答案 1 :(得分:0)

由于iPhone 5s的宽度为640,除以3将导致213,33333333。由于iOS不喜欢这些值,它会将值更正为213,这将产生一个间距,当有三个彼此相邻时,因为213 * 3不等于640.在iPhone 6s Plus上,宽度为1080同样可以被3分割,产生360,这里不会出现间距。

尝试找到一个等于任何屏幕大小的自然数的分隔符,并且空格应该消失,或者您尝试找到另一种解决方案。

答案 2 :(得分:0)

创建 CollectionView ,然后根据以编程方式调整单元格和间距,您可以尝试添加 minimumInteritemSpacingForSectionAtIndex minimumLineSpacingForSectionAtIndex 你自己的代码。

func collectionViewLaunch() {

    // layout of collectionView
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()

    // item size
    layout.itemSize = CGSizeMake(self.view.frame.width / 3, self.view.frame.size.width / 3)

    // direction of scrolling
    layout.scrollDirection = UICollectionViewScrollDirection.Vertical

    // define frame of collectionView
    let frame = CGRectMake(0, 0,
        self.view.frame.size.width, self.view.frame.size.height - self.tabBarController!.tabBar.frame.size.height - self.navigationController!.navigationBar.frame.size.height)

    // declare collectionView
    collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)
    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.alwaysBounceVertical = true
    collectionView.backgroundColor = .whiteColor()
    self.view.addSubview(collectionView)

    self.collectionView.hidden = false

    // define cell for collection view
    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")

    // call function to load posts
    loadPosts()

}

// cell line spacing
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
    return 0
}


// cell inter spacing
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,
    minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
    return 0
}

// cell numb
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return picArray.count
}
希望能帮到你。

答案 3 :(得分:0)

我在水平和垂直集合视图方面遇到了类似的问题。

我使用滑块来设置列数,然后根据新的单元格大小调整集合中的UIImages

除此之外,我将一个箭头的图像切成两半,并将每一半放在集合视图的两侧,这样当它显示时,它会在图像之间绘制一个完整的箭头...我无法在那个时候被自定义分隔符插入困扰......这就是箭头“应该”生存的地方。

因此,根据屏幕尺寸和方向,我不时会在箭头中出现像素宽的间隙。

这一切都在分割结果的四舍五入。

你必须找到一个宽度/高度,尽可能地划分最适合的屏幕。

如果总和中的值不是整数但是找到正确的值来替换它意味着必须指定每个可能性,您可以应用一些条件的视图大小调整。

最后,我放弃并“生活”了单像素宽的间隙