将UITextView的大小调整为其文本大小,如果大于高度,则缩小大小

时间:2014-10-24 18:45:39

标签: ios uitableview swift uitextview

我正在尝试制作一个类似于facebook等应用程序的tableview,它会显示帖子的文本,如果帖子太大,它会缩小尺寸并有一个“Read More”按钮。我已经看了很多不同的解决方案,用于将UITextViews调整到文本的高度,但是没有一个解决我的问题。我的问题只存在于大帖子中。当我有一个大帖子时,我的返回textView高度的函数应该在展开之前返回帖子的maxHeight。这部分有效。但是,当我单击“Read More”按钮时,我在全文ViewView的底部有大量的空白区域。这是我的代码:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
     return heightForTextOfRow(indexPath.row) + PostCell.additionalVertSpaceNeeded
}

func heightForTextOfRow(row: Int) -> CGFloat {
     var textView = UITextView(frame: CGRectMake(0, 0, prototypeTextViewWidth, CGFloat.max))
     let post = data[row]

     textView.text = (post.postText as NSString).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
     textView.textContainer.lineFragmentPadding = 0
     textView.textContainerInset = UIEdgeInsetsZero
     textView.font = PostCell.textViewFont
     textView.frame.size = textView.sizeThatFits(CGSizeMake(prototypeTextViewWidth, CGFloat.max))
     if textView.frame.size.height > maxHeight && !post.seeMore {
         return maxHeight
     } else {
         return textView.frame.size.height
     }

}

代码的一些解释:

  • data是一个Posts数组(在这种情况下,唯一与Post类相关的是它有一个属性postText和seeMore。)
  • PostCell.textViewFont是我的一个类中的常量,它返回我正在使用的字体(系统字体大小为13)
  • PostCell.additionalVertSpaceNeeded是一个常量,它返回原型单元格中除UITextView之外的所有其他元素的高度
  • prototypeTextViewWidth定义为tableView.frame.width - 16(16是加在一起的边距值)
  • maxHeight是不希望显示完整帖子的帖子的最大高度(当前定义为tableView.frame.height * 0.625 - PostCell.additionalVertSpaceNeeded)
  • seeMore是Post的Bool属性,告诉您是否显示完整帖子或是否只显示帖子的一部分(true显示完整帖子,false显示高度maxHeight的帖子)

任何帮助将不胜感激...我已经尝试了许多解决方案来调整UITextView的大小,并且都有同样的问题。提前谢谢!

0 个答案:

没有答案