Интервал между ячейками UICollectionView больше не работает - PullRequest
0 голосов
/ 29 мая 2018

Я работал над этим приложением в течение нескольких дней, я работаю над созданием UICollectionView, чтобы он выглядел как сетка без промежутков между ячейками.Он работал фантастически после того, как я нашел этот ответ и внедрил его в свою собственную программу.Я работал над некоторыми другими файлами и обновлял свой компьютер, затем я вернулся и протестировал это приложение, просто чтобы увидеть, где я был, и по какой-то причине между ячейками есть горизонтальный интервал.Я рассмотрел несколько других вопросов, похожих на этот, но мне просто интересно, как это исправить и почему это произошло, когда я ничего не изменил, связанный с макетом.

Вот как это выглядит сейчас:

Here's what it looks like now

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 интервалов по всем краям.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018
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
    }

}
0 голосов
/ 29 мая 2018

Можете ли вы попробовать

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:  )
}
...