gpt4 book ai didi

ios - 调整 UITextView 高度以适应 UITableViewCell 中的文本

转载 作者:行者123 更新时间:2023-11-28 09:04:55 30 4
gpt4 key购买 nike

我目前正在构建一个在表格中显示用户帖子的社交网络应用程序。每篇文章将显示在表格的一个单元格中。因为我不知道用户会为一篇文章输入多少内容,所以我需要根据用户输入的文本量来设置 TextView 大小。问题是我当前的实现不工作并且行为异常。

这是我的表格代码:

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

let cell : UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("HomeCell") as? UITableViewCell
let post : Post = tblData[indexPath.row]

//Get all custom cell components
let userLbl = cell?.viewWithTag(101) as UILabel
let timeLbl = cell?.viewWithTag(102) as UILabel
let postLbl = cell?.viewWithTag(103) as UITextView
let profilePic = cell?.viewWithTag(100) as UIImageView
let postPic = cell?.viewWithTag(104) as UIImageView

//Post lbl properties
let textHeight = textViewDidChange(postLbl)
postLbl.frame.size.height = CGFloat(textHeight)
//postLbl.selectable = false

//Individual height variables
let postInfoHeight = 66 as CGFloat
var postHeight = 8 + CGFloat(textHeight)
var imgHeight = 8 + postPic.frame.height as CGFloat

if post.postInformation == "" {
postLbl.removeFromSuperview()
postHeight = 0
}

if post.img == nil {
postPic.removeFromSuperview()
imgHeight = 0
}

//Change the autolayout constraints so it works properly
return postInfoHeight + postHeight + imgHeight
}

下面是计算 TextView 高度的代码:

func textViewDidChange(textView : UITextView) -> Float {

let content : NSString = textView.text
let oneLineSize = content.sizeWithAttributes(["NSFontSizeAttribute": UIFont.systemFontOfSize(14.0)])

let contentSize = CGSizeMake(textView.frame.width, oneLineSize.height * round(oneLineSize.width/textView.frame.width))

return Float(contentSize.height)
}

我不明白为什么这没有给我正确的结果。如果有人能发现错误或建议如何解决此问题,我将不胜感激。提前致谢!

最佳答案

感谢@jrisberg 提供指向其他问题的链接。我决定放弃使用 TextView ,现在改用 UILabel。另一个问题中的代码非常古老并且使用了很多不推荐使用的方法,所以我将在此处发布一些适用于 iOS 8 的更新代码。我删除了 textViewDidChange(textView : UITextView) 方法并将我的 tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) 方法更改为:

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

let cell : UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("HomeCell") as? UITableViewCell
let post : Post = tblData[indexPath.row]

//Get custom cell components
let postLbl = cell?.viewWithTag(103) as UILabel
let postPic = cell?.viewWithTag(104) as UIImageView

//Post lbl properties
let PADDING : Float = 8
let pString = post.postInformation as NSString?

let textRect = pString?.boundingRectWithSize(CGSizeMake(CGFloat(self.tableView.frame.size.width - CGFloat(PADDING * 3.0)), CGFloat(1000)), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(14.0)], context: nil)

//Individual height variables
let postInfoHeight = 66 as CGFloat
var postHeight = textRect?.size.height
postHeight? += CGFloat(PADDING * 3)
var imgHeight = 8 + postPic.frame.height as CGFloat

if post.img == nil {
postPic.removeFromSuperview()
imgHeight = 0
}

//Change the autolayout constraints so it works properly
return postInfoHeight + postHeight! + imgHeight
}

关于ios - 调整 UITextView 高度以适应 UITableViewCell 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060693/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com