Ios UICollectionViewCell,可根据Universal app中的文本量自动垂直调整大小

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),单元格的宽度不会根据设备的屏幕进行调整。它在屏幕外显示,如下

我是一个业余的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)
    }