UITableview swift中的UITextview高度

Posted

技术标签:

【中文标题】UITableview swift中的UITextview高度【英文标题】:UITextview height in UITableview swift 【发布时间】:2016-04-17 14:29:53 【问题描述】:

UITableViewCell 中设置UITextview 时遇到问题。由于函数 heightforrowatindexpathcellforrowatindexpath 之前运行,所以我无法计算 UITextview 的内容大小。

我只是通过cellforrowatindexpath 函数中的textview.contentSize.height 来计算大小。

我基本上希望UITextview contentHeight 适合UITableViewCell,因此每个UITextView 都看不到滚动,它会通过增加UITableViewCell 的高度来显示全部内容。

我也是一个UILabel,就在UITableViewCell中的UITextView之上,我试图为两者设置约束,但无法实现我的目标。

如何在以下函数中动态计算UITableViewCell 的大小:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 


P.S: 是否可以根据设备高度使用自动布局或其他技术稍微增加UITableViewCell 的高度。

【问题讨论】:

【参考方案1】:

您可以只传递带有内容的 textView 以计算 textView 的高度

func calculateHeight(textView:UITextView, data:String) -> CGRect 

    var newFrame:CGRect! 

    // I was using the html content here. If your content is not HTML you can just pass the stringValue to your textView
    do 
        let attr = try NSAttributedString(data: html.dataUsingEncoding(NSUTF16StringEncoding)!, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes: nil)
        textView.attributedText = attr

    catch 
        //Handle Exceptions
    

    let fixedWidth = textView.frame.size.width
    textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
    let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
    newFrame = textView.frame
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
    print("height \(newFrame.height)")
    return newFrame

您可以在您的heightForRowAtIndex 中调用此方法,这样您就可以获得一个新的更新帧,您可以从中获取新的更新高度。

请确保将scrollEnabled 保留为cellForRowAtIndexPath 中单元格textView 的false

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

        //Cell making here......

        cell.yourTextView.scrollEnabled = false
        return cell  
    

【讨论】:

【参考方案2】:

1) 在 heightForRowAtIndexPath 中,给单元格大小如下:

返回 UITableViewAutomaticDimension

2) ...并添加以下内容:

覆盖 func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 返回 UITableViewAutomaticDimension

希望对你有帮助……

【讨论】:

以上是关于UITableview swift中的UITextview高度的主要内容,如果未能解决你的问题,请参考以下文章

Swift - UITableView 中的标题阻止按钮交互

如何在 swift 中增加 ScrollView 中的 UITableView 高度

UIView中的UITableView与swift

Swift UITableView中的渐变层

UIViewController Swift 中的 UITableViewController 与 UITableView

UITableView 和 UIButtons 中的多个部分 swift