UITextView在UITableViewCell内部增长

时间:2013-01-18 17:48:07

标签: ios uitableview uitextview

我在SO上看到了很多与此相关的问题,但是,这些都与我的问题无关。

我要创建一个具有消息传递功能的应用程序。类似于Apple有Mail和LinkedIn在他们的应用程序中有它的邮件功能,我希望有一个UITableView有3行。第三行有UITextView,必须随用户输入而增长。我的代码如下:

- (void)textViewDidChange:(UITextView *)textView {
    if (bodyText.contentSize.height > currentContentHeight) {
        currentContentHeight = bodyText.contentSize.height;

        [tblView beginUpdates];
        [tblView endUpdates];

        [bodyText setFrame:CGRectMake(0, 0, 310.0, currentContentHeight)];

        bodyText.selectedRange = NSMakeRange(textView.text.length - 1, 0);

    } else {
        currentContentHeight = minimumContentHeight;

        [tblView beginUpdates];
        [tblView endUpdates];
    }
}

当我按下iPhone上的返回时,它会下降并且完美无缺。问题是,如果我转到UITextView的中心或任何其他中间部分,它似乎会产生有趣的行为,因为它会导致contentSize错误。例如:

  • 我按回10次
  • 转到第五行并输入'dog'
  • 根据第5行获得contentHeight,如果有意义的话?

有没有办法根据当前文本的全部来计算?如果我上面遗漏了任何内容,请告诉我。我广泛阅读了以下内容:

http://dennisreimann.de/blog/uitextview-height-in-uitableviewcell/

https://stackoverflow.com/questions/985394/growing-uitextview-and-uitableviewcell

UITextView inside a UITableViewCell

How do I size a UITextView to its content?

1 个答案:

答案 0 :(得分:2)

我用以下内容编辑了上面的代码,它对我有用:

- (void)textViewDidChange:(UITextView *)textView {    
    // Get the number of lines in the current view
    NSUInteger lines = textView.text.length;
    if ((lines * 25) > currentContentHeight && (lines * 25) >= minimumContentHeight && bodyText.contentSize.height > minimumContentHeight) {

        currentContentHeight = bodyText.contentSize.height;

    } else if (lines < 5){
        currentContentHeight = minimumContentHeight;
    }

    [tblView beginUpdates];
    [tblView endUpdates];

    [bodyText setFrame:CGRectMake(5, 5, 310, currentContentHeight)];

    bodyText.selectedRange = [bodyText selectedRange];
}

我根据手机的大小在开头设置currentContentHeight等于minimumContentHeight