gpt4 book ai didi

ios - Swift UICollectionView 单元格宽度

转载 作者:搜寻专家 更新时间:2023-11-01 07:03:47 24 4
gpt4 key购买 nike

我试图在不使用界面生成器的情况下构建 Collection View ,但我无法调整单元格的宽度。单元格似乎保持其最小正方形大小,我希望单元格能够拉伸(stretch) View 的宽度。

我对约束有什么误解?

具体来说:

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

似乎没有调整单元格的宽度或高度,完整示例:

import UIKit

class UserCollectionViewController: UICollectionViewController {

override func viewDidLoad() {
super.viewDidLoad()

navigationItem.title = "foo"
collectionView?.backgroundColor = UIColor.red
collectionView?.alwaysBounceVertical = true
collectionView?.register(UserCell.self, forCellWithReuseIdentifier: "cellId")
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 20
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let userCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath)
return userCell
}

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

class UserCell:UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

let nameLabel: UILabel = {
let label = UILabel()
label.text = "foo"
label.translatesAutoresizingMaskIntoConstraints = false
label.font = UIFont.boldSystemFont(ofSize: 14)
return label
}()

func setupView() {
addSubview(nameLabel)
let hConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": nameLabel])
addConstraints(hConstraints)
}
}

最佳答案

What am I getting wrong with the constraints?

没有。 UICollectionViewFlowLayout 下的 UICollectionViewCell 的宽度与其内部约束无关。 (应该有一个允许这样做的功能,但它对我来说从来没有用过。)

您可以通过设置流布局的 itemSize 或通过在集合中实现 collectionView(_:layout:sizeForItemAt:) 来显式设置宽度 View 的委托(delegate)(通常是 UICollectionViewController,并且在任何情况下都必须明确采用 UICollectionViewDelegateFlowLayout,正如 Rob 的回答中告诉您的那样)。

所以只要改变这个:

class UserCollectionViewController: UICollectionViewController {

为此:

class UserCollectionViewController : UICollectionViewController, UICollectionViewDelegateFlowLayout {

大功告成。

关于ios - Swift UICollectionView 单元格宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49352011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com