当内容大小更改时展开UITableViewCell

时间:2015-07-31 23:13:31

标签: ios xcode swift uitableview uitextview

我在静态UITableViewCell中有一个UITextView,如下所示:

Picture

在我的表视图类的viewDidLoad()方法中,我希望能够更改UITextView的文本,让UITextView更改大小以适应文本(我在UITextView上禁用了滚动),然后拥有UITableViewCell仍然受到限制,正如我所预期的那样。这是我尝试这样做的:

override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.delegate = self

    self.aboutTextView.text = "Some Long String"

    //implement self sizing cells
    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 400.0

    //set the frame of the UITextView to match the size of the text
    let fixedWidth = aboutTextView.frame.size.width
    let newSize = aboutTextView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
    var newFrame = aboutTextView.frame
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
    aboutTextView.frame = newFrame;
    //This is returning the new size correctly

    //Reload the tableview, nothing happens, text view remains the same size as in the storyboard
    self.tableView.reloadData()
}

虽然新框架大于故事板中的默认大小,但重新加载tableView时没有任何反应。我在UITextView上尝试了setNeedsLayout(),但也没有运气。我还尝试通过IBOutlet来约束UITextView的高度并改变高度的常量,但是由于显而易见的原因,约束会中断。有人知道为什么我的代码不起作用吗?做我想做的更好的方法吗?

1 个答案:

答案 0 :(得分:0)

有关行高的所有代码都应放在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)函数中。这样,每当重新加载表时,代码将再次执行,从而改变表高度。

编辑:我完全误解了你在做什么。在故事板中,尝试向单元格中的UITextView添加约束并为其赋予高度约束,然后确保单元格的高度约束略大于UITextView的高度约束。