在 Swift 4 中居中 UICollectionViewCells

Posted

技术标签:

【中文标题】在 Swift 4 中居中 UICollectionViewCells【英文标题】:Center UICollectionViewCells in Swift 4 【发布时间】:2017-09-03 07:05:21 【问题描述】:

我正在开发 UICollectionView,到目前为止我做得很好。我被困在 UIViewLayout 中,我想让单元格居中。 我正在尝试使我的 UICollectionView Cells 居中。请看下面的图片。图 1 是我通过下面的代码实现的 图 2 是我想要的样子。请帮助各位。 TIA 图片 - 1

图片 - 2

看看我的代码 sn-p。

import UIKit

class ViewController: UIViewController 

var collectionView: UICollectionView!
var sizingCell = StateCollectionViewCell()
var states = ["Alabama", "Alaska", "Arizona", "California", 
"Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", 
"Idaho", "Indiana", "Lowas", "Kansas", "New Jersey", "Mexico", 
"Missori", "Montana", "Newada", "New York", "Maine", "Maryland", 
"Kentchuky"]

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

  let layout = collectionView?.collectionViewLayout as! 
  UICollectionViewFlowLayout
  layout.sectionInset = UIEdgeInsets(top: 100, left: 15, bottom: 10, 
  right: 20)
  layout.estimatedItemSize = CGSize(width: 100, height: 100)
  layout.itemSize = UICollectionViewFlowLayoutAutomaticSize
  

  // Mark: - Initializing a collectionView and addint it to the VC's 
  current view
  func setupCollectionView() 
  let layout = UICollectionViewFlowLayout()
  collectionView = UICollectionView(frame: view.frame, 
  collectionViewLayout: layout)
  collectionView.register(StateCollectionViewCell.self, 
  forCellWithReuseIdentifier: "stateCell")
  collectionView.backgroundColor = UIColor.white
  collectionView.delegate = self
  collectionView.dataSource = self

  view.addSubview(collectionView)
   

   

  extension ViewController: UICollectionViewDelegate, 
  UICollectionViewDataSource, UICollectionViewDelegateFlowLayout 

  //Mark: - Specifying the number of sections in the collectionView
  func numberOfSections(in collectionView: UICollectionView) -> Int 
   return 1
  

  //Mark: - Specifying the number of cells in given section
  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
return states.count

  

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "stateCell", for: indexPath)as! stateCollectionViewCell
cell.awakeFromNib()
return cell
  

  func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) 
let stateCell = cell as! StateCollectionViewCell
stateCell.stateCell.text = states[indexPath.row]

  

 

【问题讨论】:

试试这个github link 是的,我已经看到了,但想要简单一点,就像我当前代码的更改一样。对于链接,您提供了我需要添加 pod 并进行许多更改。所以把它放在一边。 @AdityaSrivastava @iDeveloper 仅仅因为一些 UI 界面看起来很简单,并不意味着实现它的过程很简单。简单可以用多种方式定义,对于一些专家来说简单,对于以前从未做过的人来说可能并不简单。然而,这是作为 Aditya 链接的自定义 UICollectionViewFlowLayout 的示例。 【参考方案1】:

我相信你能做到这一点的最简单的方法是继承UICollectionViewFlowLayout 并更改属性,它不能在viewController 中完成。因为我刚刚编写了一个类似的自定义布局来做到这一点并使其成为一个 pod,也许它(github link)可以提供帮助。

【讨论】:

以上是关于在 Swift 4 中居中 UICollectionViewCells的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift3.0 中居中对齐 UICollectionView 的单元格?

swift-无法使用 AutoLayout 在 UIScrollView 中居中 UIImageView

自定义标题视图未在 iOS 10 中居中

卡未在引导程序 4 中居中 [重复]

如何在 Bootstrap 4 中居中导航栏链接 [重复]

如何在这个 HTML 页面中居中这 4 个按钮?