我试图调整单元格高度大小以适应UILabel文本,但它不起作用。
var mySize = CGFloat()
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! cellView
cell.myLabel.text = self.items[indexPath.item]
cell.myLabel.bounds.size.height = self.mySize
cell.backgroundColor = UIColor.yellowColor()
return cell
}
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
// handle tap events
print("You selected cell #\(indexPath.item)!")
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
func heightForLabel(text:String, font:UIFont, width:CGFloat) -> CGFloat
{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = items[indexPath.row]
label.sizeToFit()
return label.frame.height
}
let font = UIFont(name: "Helvetica Neue", size: 30)
let detailHeight = heightForLabel(items[indexPath.row], font: font!, width: UIScreen.mainScreen().bounds.size.width)
self.mySize = detailHeight
return CGSizeMake(UIScreen.mainScreen().bounds.size.width, 358 + detailHeight)
}
有什么建议吗?我应该用另一种方法吗?请,我需要帮助..问题是UILabel文本设置在cellForItemAtIndexPath
中,而items
是字符串数组。
这是我的项目文件,如果有人看一下的话:http://www.filedropper.com/test_37
8条答案
按热度按时间cbwuti441#
为什么不在ObjC中尝试一下呢
这将给予CGRect。从它获得高度。设置字体大小等属性参数。
更新
代替这个
用这个
希望这能帮上忙
v09wglhw2#
你可以这样做,但我已经实现了不同的方式。这里是代码的样本,你可以做到这一点。
afdcj2ne3#
创建String扩展名
获取字符串的高度如下
nkkqxpd94#
我创建这个方法来获取标签的高度。你需要提供标签的静态宽度和标签的字体
uqjltbpv5#
试试这个...
mlnl4t2r6#
我看了你的代码,我能解决它。
首先,在
ViewController
类的第71行:您不小心将CGFloat.max设置为width,而将width设置为height。它应该是:
我认为最好使用单元格直接包含的视图的宽度(
collectionView
),但这只是我个人的观点。第二,你需要启用AutoLayout。转到你的
Main.storyboard
文件,并确保选择了Use Auto Layout
。现在您需要添加
constraints
。(您可以阅读更多关于自动布局和约束here的内容)添加约束的方法有很多种,最简单的方法是控制单击UI元素,然后将鼠标拖动到要设置约束的元素上。
您需要为单元格添加以下约束:
And these for your CollectionView
我已经附加了项目,修改与AutoLayout在这里下面。
Modified project
编辑:
方法2 -不使用AutoLayout。
这也可以在不使用AutoLayout的情况下通过手动更新
collectionView:willDisplayCell:
中单元格的标签高度来实现。我相信有更好的替代方案,在此之前我个人会尝试AutoResizingMasks
。Project without AutoLayout
ct3nt3jp7#
vbopmzt18#
在Swift 5中,您可以使用以下代码