我想要一个椭圆形的收集单元,其宽度根据标签/文本的长度而定,但是我很难使所有单元格看起来都呈椭圆形。我不知道如何根据标签的文本长度调整大小。
我本质上是在尝试获得下面在另一篇文章中看到的空白/粉红色图片,但该解决方案无效。我还添加了视图控制器当前的外观。
1)如何调整大小以正确获得椭圆形,以及2)为什么某些单元格之间的间隔更长,如何解决?
Storyboard cell (标签的宽度设置为150)
class HobbiesViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate{
@IBOutlet weak var collectionView: UICollectionView!
var items = ["karateeeeeeeeeee", "signup", "last", "madur", "open", "somelongword", "nice", "looooooooong", "karate", "karate","karate", "signup", "last", "madur"]
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
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: "hobbyCell", for: indexPath) as! HobbiesViewCell
cell.label.text = self.items[indexPath.item]
cell.backgroundColor=UIColor.blue //try with different values untill u get the rounded corners
cell.layer.cornerRadius = cell.bounds.size.height / 2
cell.layer.masksToBounds=true
return cell
}
}
extension HobbiesViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "hobbyCell", for: indexPath) as! HobbiesViewCell
cell.label.text = items[indexPath.row]
cell.label.sizeToFit()
return CGSize(width: cell.label.frame.width + 10 , height: 70)
}
}
答案 0 :(得分:0)
答案1.在设置集合视图单元格的宽度时,您需要为该单元格设置一些最小宽度,以使该单元格不会变得太小而看起来像一个圆形。您当前的身高是70,因此您应该保持一个条件,如果cell.label.frame.width + 10
小于160,则将单元格的大小保持为160。
答案2.收集视图本身根据提供给收集视图的框架和单元的大小来管理单元之间的间距。要设置正确的间距,可能会在下面的链接中为您提供帮助。
Cell spacing in UICollectionView
从屏幕截图中,我可以看到您的字体大小也与预期的输出不同,因此也许您也可以进行检查。
希望这对您有所帮助。