我在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
错误。例如:
contentHeight
,如果有意义的话?有没有办法根据当前文本的全部来计算?如果我上面遗漏了任何内容,请告诉我。我广泛阅读了以下内容:
http://dennisreimann.de/blog/uitextview-height-in-uitableviewcell/
https://stackoverflow.com/questions/985394/growing-uitextview-and-uitableviewcell
答案 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
。