1

我在 SO 上看到了很多与此相关的问题,但是,没有一个与我的问题有关。

我要创建一个具有消息传递功能的应用程序。与 Apple 的 Mail 和 LinkedIn 在他们的应用程序中的 Mail 功能类似,我希望有UITableView3 行。第三行具有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 次
  • 转到第五行并输入“狗”
  • contentHeight基于第 5 行,如果这有意义吗?

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

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

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

UITableViewCell 内的 UITextView

如何根据内容调整 UITextView 的大小?

4

1 回答 1

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

于 2013-01-19T20:19:15.560 回答