【问题标题】:SWIFT - Collection View Cell sizeSWIFT - 集合视图单元格大小
【发布时间】:2023-03-19 13:02:01
【问题描述】:

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

在集合视图中,我有 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)
}

我也检查了是否是图像视图问题,但不是。

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

【问题讨论】:

  • 您的单元格的宽度正确,是您的收藏视图太宽了。您可以在屏幕截图中看到单元格是 213*213,但它们被剪裁在一边。您是否正确地将收藏视图固定到其父视图的边缘?

标签: ios swift uicollectionview


【解决方案1】:

创建CollectionView,然后以编程方式适合单元格和间距,您可以尝试添加minimumInteritemSpacingForSectionAtIndexminimumLineSpacingForSectionAtIndex你自己的代码。

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
}

希望能帮到你。

【讨论】:

    【解决方案2】:

    求和,向下取整,然后乘以列数。

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

    【讨论】:

      【解决方案3】:

      由于 iPhone 5s 的宽度为 640,将其除以 3 将得到 213,33333333。由于 iOS 不喜欢这些值,它会将值更正为 213,这将在其中三个彼此相邻时创建间距,因为 213*3 不等于 640。在 iPhone 6s Plus 上,宽度为1080 可以被 3 整除,结果是 360,这里不会出现间距。

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

      【讨论】:

      • 213*3 = 639 -> 间距 0.5 点 -> 在 iPhone 5s 上:1 像素。如果你的答案是对的,那么 iPhone 5s 上就有 1 个像素的间距。
      • @vikingosegundo 那么你认为什么可以解决这个问题?
      • 我不知道。但这不是你说的。
      【解决方案4】:

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

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

      在此之上,我将一个箭头的图像一分为二,并将每一半放在集合视图的两侧,这样当它显示时,它会在图像之间绘制一个完整的箭头......我不能'当时不必为自定义分隔符插入而烦恼……这是箭头“应该”存在的地方。

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

      这一切都在除法结果的四舍五入中。

      您必须找到一个尽可能分开的宽度/高度,以适应最常用的屏幕。

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

      最后我放弃了,和单像素宽的差距“活”了

      【讨论】:

        猜你喜欢
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-18
        • 1970-01-01
        相关资源
        最近更新 更多