【问题标题】:UICollectionView cell spacing not working anymoreUICollectionView 单元格间距不再起作用
【发布时间】:2018-05-29 20:40:57
【问题描述】:

我已经在这个应用程序上工作了几天,我正在设计一个 UICollectionView,使其看起来像一个网格,单元格之间没有间距。在我找到this answer 并将其实施到我自己的程序中后,它的工作非常出色。我处理了一些其他文件并更新了我的计算机,然后我回来测试了这个应用程序,只是为了看看我在哪里,出于某种原因,单元格之间存在水平间距。我已经查看了与此类似的其他一些问题,但我只是想知道如何解决这个问题以及为什么在我没有更改与布局相关的任何内容时会发生这种情况。

这是现在的样子:

import UIKit

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

@IBOutlet weak var collectionView: UICollectionView!

var model = BoardModel()
var board = Board()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    collectionView.delegate = self
    collectionView.dataSource = self

    board = model.newGame(4, 4)

    // Remove the spacing between the cells in collectionView
    // Also make the cells the correct size to form a square/rectangle
    let screenSize: CGRect! = collectionView.bounds
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    layout.itemSize = CGSize(width: screenSize.width/CGFloat(board.columns), height: screenSize.width/CGFloat(board.columns))
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    collectionView!.collectionViewLayout = layout

    // Center the collectionView
    collectionView.contentInset.top = max((collectionView.frame.height - collectionView.contentSize.height) / 5, 0)

}

我使用 collectionView 边界而不是 UIScreen.mainScreen().bounds 的原因是因为我的 collectionView 在所有边缘周围都有 20 个间距。

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewcell uicollectionviewlayout


    【解决方案1】:

    你可以试试

    let width = UIScreen.main.bounds.width - 40 // convert it if it's not swift 4
    let height = UIScreen.main.bounds.height - 40  
    

    //

    或实施

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    
         return CGSize.init(width:  , height:  )
    }
    

    【讨论】:

    • 谢谢第一行单独修复。
    【解决方案2】:
    import UIKit
    
    class ViewController: UIViewController {
        fileprivate let sectionInsets = UIEdgeInsets(top: 5.0, left: 5.0, bottom: 5.0, right: 5.0)
        fileprivate let itemsPerRow: CGFloat = 2
    
      override func viewDidLoad() {
            super.viewDidLoad()
    }
    
    }
    // MARK: UICollectionViewDelegateFlowLayout
    
    extension ViewController : UICollectionViewDelegateFlowLayout {
    
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize{
            let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
            let availableWidth = view.frame.width - paddingSpace
            let widthPerItem = availableWidth / itemsPerRow
            let heightPerItem = widthPerItem + 21
    
            return CGSize(width: widthPerItem, height: heightPerItem)
        }
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets{
            return sectionInsets
        }
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat{
            return sectionInsets.left
        }
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat{
    
            return 0
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 2014-09-24
      • 1970-01-01
      相关资源
      最近更新 更多