如何在 Swift 中使用宽度约束将 Xib 加载到 CollectionView?
Posted
技术标签:
【中文标题】如何在 Swift 中使用宽度约束将 Xib 加载到 CollectionView?【英文标题】:How to load Xib to CollectionView using width constraint in Swift? 【发布时间】:2020-11-18 09:39:00 【问题描述】:我有这样的collectionView
我正在向这样的单元格调用不同的 3 个 xib 文件
collectionView.register(UINib(nibName: "OfficialVehicleHeader", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleHeaderCell")
collectionView.register(UINib(nibName: "OfficialVehicleMedium", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleMediumCell")
collectionView.register(UINib(nibName: "OfficialVehicleBottom", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleBottomCell")
我的collectionView布局代码
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
collectionView.setCollectionViewLayout(layout, animated: true)
layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
在 xib 文件中,我设置了约束(前导、尾随、底部、顶部为 0)以及高度约束。高度运行得很好没问题,但我不想设置宽度限制。因为屏幕不同
我哪里弄错了?
【问题讨论】:
【参考方案1】:您必须设置前导和尾随它将根据设备宽度设置宽度。但不要忘记让您的集合视图约束可调整大小。
这是我的示例代码:
collectionView.translatesAutoresizingMaskIntoConstraints = false
collectionView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
collectionView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
collectionView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
collectionView.topAnchor.constraint(equalTo: view.topAnchor, constant: 140).isActive = true
collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
布局设置:
layout.itemSize = CGSize(width: self.view.frame.width - 10, height: self.view.frame.height / 3)
可调整大小的单元格约束:
cell.widthAnchor.constraint(equalTo: widthAnchor, constant: 0).isActive = true
cell.heightAnchor.constraint(equalTo: heightAnchor, constant: 0).isActive = true
cell.leftAnchor.constraint(equalTo: leftAnchor, constant: 0).isActive = true
cell.rightAnchor.constraint(equalTo: rightAnchor, constant: 0).isActive = true
【讨论】:
【参考方案2】:我解决了这个问题。我需要设置宽度约束,但我不想设置。我这样解决
转到xib文件并设置宽度限制
转到尺寸检查器并选择您创建的宽度约束
设置标识符,例如“myConstraint”
打开您的单元格文件并定义 IBOutlet
for constraint in self.containerView.constraints
if constraint.identifier == "myConstraint"
constraint.constant = UIScreen.main.bounds.size.width * 0.70
containerView.layoutIfNeeded()
我添加了我提到的图像
【讨论】:
以上是关于如何在 Swift 中使用宽度约束将 Xib 加载到 CollectionView?的主要内容,如果未能解决你的问题,请参考以下文章