UICollectionView 单元格间距不再起作用
Posted
技术标签:
【中文标题】UICollectionView 单元格间距不再起作用【英文标题】:UICollectionView cell spacing not working anymore 【发布时间】: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 个间距。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于UICollectionView 单元格间距不再起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何为 UICollectionView 中的单元格设置可变单元格间距
UICollectionView-如何删除第一个单元格上方的间距?
删除每个 UICollectionViewCell 之间的间距并将其移动到 UICollectionView 的外部单元格