我正在尝试使用UICollectionView
创建cell label
水平滚动(如顶部菜单的单行)。在这里,我需要实现标签内容的不同长度,因此基于不同长度的单元格标签应自动调整其宽度。我在设计中使用情节提要。
在我的代码下方
extension CameraViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Constants.reuseID, for: indexPath) as! cameraModeCollectionViewCell
cell.cameraMode.text = self.items[indexPath.item]
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("You selected cell #\(indexPath.item)!")
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake(0, 40, 0, 40)
}
}
答案 0 :(得分:4)
步骤1:找到每个单元格中必须放置的文本的宽度。可以使用以下功能找到
string.size(withAttributes:[.font: UIFont.systemFont(ofSize: 14.0)]).width
使用此功能,我们可以找到运行时动态文本的宽度。
第2步:使用在步骤1中找到的宽度设置每个单元格的大小。使用下面的委托设置每个单元格的大小
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
结合步骤1和2,我们可以获得一个集合视图,该视图的单元格宽度与放置在其中的文本宽度相同。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let text = self.items[indexPath.row] // getting text of each index
let cellWidth = text.size(withAttributes:[.font: UIFont.systemFont(ofSize: 14.0)]).width + 10.0 // getting width of each text + extra margin of 10
return CGSize(width: cellWidth, height: 40.0) // height as per your requirement
}
答案 1 :(得分:2)
实施UICollectionViewDelegateFlowLayout's
方法collectionView(_:layout:sizeForItemAt)
,并根据您要填充{{的width
的{{1}}计算collectionViewCell
的{{1}} 1}}。
width
在上面的代码中,我使用text
作为label
的来源。 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let text = self.items[indexPath.row]
let cellWidth = text.size(withAttributes:[.font: UIFont.systemFont(ofSize: 14.0)]).width + 10.0
return CGSize(width: cellWidth, height: collectionView.bounds.height)
}
是添加到单元格的额外self.items[indexPath.row]
。
如果text
10.0
为padding
,请在使用前将items
的值array
设置。