所以我需要做的就是制作一个标签的水平列表,为此我使用了一个集合视图。它看起来像预期的那样工作,但我的标签被裁剪,只有一半的标签显示如下:
这就是它应该看起来的样子:
我的vc代码:
class STViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
let data: [stmodel] = [stmodel(text: "صف أول"),
stmodel(text: "صف ثاني"),
stmodel(text: "صف ثالث")]
override func viewDidLoad() {
super.viewDidLoad()
collectionView.dataSource = self
collectionView.delegate = self
// Do any additional setup after loading the view.
}
}
extension STViewController : UICollectionViewDataSource,UICollectionViewDelegate {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return data.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! ClassesCollectionViewCell
cell.configure(with: data[indexPath.row])
return cell;
}
}
谢谢大家!
3条答案
按热度按时间gkn4icbw1#
关于您的问题,您可以使用UICollectionViewDelegateFlowLayout解决它。
要了解有关UICollectionViewDelegateFlowLayout的更多信息,您可以阅读Apple文档。[链接]:https://developer.apple.com/documentation/uikit/uicollectionviewdelegateflowlayout
1sbrub3j2#
我遇到了同样的问题,并找到了两个有效的方法来解决这个问题。
1.您可以新建一个UICollectionViewFlowLayout的示例,并将其设置为您的UICollectionView的collectionViewLayout,这样就可以轻松控制您的UICollectionView的itemSize,使其不被裁剪。为此,请按照以下方式编辑您的viewDidLoad()。
2.您可以使用UICollectionViewDelegateFlowLayout协议的sizeForItemAt方法,同时也可以设置UICollectionView的项目大小,只需添加以下扩展即可。
这应该能解决你的问题。
nwo49xxi3#
您不需要设置
layout.itemSize
,也不需要实现sizeForItemAt
。事实上,如果你想要可变宽度的单元格(看起来是你想要的),那么使用这两种方法都不会给予你想要的结果。
由于您使用的是情节提要,请确保集合视图“估计单元格大小”为“自动”:
在开发过程中,它可以帮助您为UI元素提供对比色,以便更容易看到框架。
例如,我的故事板看起来像这样:
所以,这就是运行时的样子……
首先,使用“开发”颜色,加上集合视图周围的红色边框,以便我们可以看到它的框架:
然后,使用“运行时”颜色:
没有红色边框:
为了得到它我用了你的代码...
你没有提供你的
stmodel
,所以我使用了这个:和一个简单的细胞类来尝试匹配你的图像:
和控制器类-注意没有
.itemSize
或sizeForItemAt
代码:这是故事板的来源: