Ios UICollectionViewCell,可根据Universal app中的文本量自动垂直调整大小
我是一个业余的iOS开发者。我在iOS上制作了一个简单的单窗口通用应用程序来演示我的问题。在interface builder中,我将UICollectionView添加到我的视图中,并为其提供了覆盖整个屏幕的特定约束。然后我制作了一个原型单元,并使用实用程序面板将其宽度设置为580,高度设置为80。并向该单元格添加了一个标签,并在interface builder本身中给出了约束 现在,如果我运行这个项目(模拟设备iPhone6),单元格的宽度不会根据设备的屏幕进行调整。它在屏幕外显示,如下所示: 添加上述代码并运行项目后,宽度根据设备屏幕大小进行了完美调整,如下所示:Ios UICollectionViewCell,可根据Universal app中的文本量自动垂直调整大小,ios,objective-c,uicollectionview,uicollectionviewcell,uicollectionviewlayout,Ios,Objective C,Uicollectionview,Uicollectionviewcell,Uicollectionviewlayout,我是一个业余的iOS开发者。我在iOS上制作了一个简单的单窗口通用应用程序来演示我的问题。在interface builder中,我将UICollectionView添加到我的视图中,并为其提供了覆盖整个屏幕的特定约束。然后我制作了一个原型单元,并使用实用程序面板将其宽度设置为580,高度设置为80。并向该单元格添加了一个标签,并在interface builder本身中给出了约束 现在,如果我运行这个项目(模拟设备iPhone6),单元格的宽度不会根据设备的屏幕进行调整。它在屏幕外显示,如下
我想实现的功能是,CollectionViewCell根据可变文本的大小调整单元格的高度,使其完全适合,并根据设备屏幕宽度调整单元格的宽度。有人能帮忙吗?只要计算一下文本的高度就行了。这里是方法
func heightForView(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 = text
label.sizeToFit()
return label.frame.height
}
那你就可以这样用了
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let cellWidth = self.view.frame.size.width
let cellHeight = heightForView("Your Text", font: UIFont.systemFontOfSize(17), width: cellWidth)
return CGSize(width: cellWidth, height: cellHeight)
}
不要为UIABLE约束选择“相等”值。仅对高度约束使用“大于”否,对单元等高也不要使用数据源是的,它可以工作。现在我们有了UILabel的真实大小。然后我们必须编辑数据源您是否使用“equal”参数实现了行的高度?对于“width”,我应该使用哪个值?屏幕宽度还是我的单元格所需的宽度?(我的单元格所需宽度为screenWidth-20)您的单元格所需宽度
func heightForView(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 = text
label.sizeToFit()
return label.frame.height
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let cellWidth = self.view.frame.size.width
let cellHeight = heightForView("Your Text", font: UIFont.systemFontOfSize(17), width: cellWidth)
return CGSize(width: cellWidth, height: cellHeight)
}