【发布时间】:2014-04-19 03:12:44
【问题描述】:
我正在做一个测试项目,遇到了 UITextView 的问题。
我在文本视图中动态获取文本的内容大小,然后在需要时增加其高度。当高度达到我设置的阈值时,我将设置 scrollEnabled = YES 以启用滚动。如以下屏幕截图所示,似乎发生了奇怪的事情:
在换行和启用滚动之前:
输入下一个字符后,将启用滚动:
之后,再次输入另一个字符,启用滚动后文本视图将再次恢复正常(实际上高度与之前的屏幕截图一样,我根据内容大小更改高度,所以它与之前的高度相同启用滚动):
有人遇到过这个问题并且能够解决吗?如果这是一个 iOS7 错误,还有其他关于创建消息输入文本框的建议吗?我想知道以前的iOS版本是否有这个问题。
已编辑:
当textview的scrollEnabled为YES并更改textview.frame.size.height时,似乎会出现此问题,然后高度将重置为初始高度(如在Interface Builder中设置的高度)。想知道这是否有助于解决这个问题。
下面显示了用于编辑文本视图高度的代码(这是一个选择器的方法,将在收到 UITextViewTextDidChangeNotification 时调用):
NSInteger maxInputFieldWidth = self.inputTextField.frame.size.width;
CGSize maxSize = CGSizeMake(maxInputFieldWidth, 9999);
CGSize neededSize = [self.inputTextField sizeThatFits:maxSize];
NSInteger neededHeight = neededSize.height;
if (self.inputTextField.hasText)
{
[self.inputTextField scrollRangeToVisible:NSMakeRange([self.inputTextField.text length], 0)];
if (neededHeight <= TEXTVIEW_MAX_HEIGHT_IN_USE && neededHeight != previousHeight)
{
previousHeight = neededHeight;
CGRect inputTextFieldFrame = self.inputTextField.frame;
inputTextFieldFrame.size.height = neededHeight;
inputTextFieldFrame.origin.y = TEXTVIEW_ORIGIN_Y;
self.inputTextField.frame = inputTextFieldFrame;
}
else if (neededSize.height > TEXTVIEW_MAX_HEIGHT_IN_USE)
{
if (!self.inputTextField.scrollEnabled)
{
self.inputTextField.scrollEnabled = YES;
CGRect inputTextFieldFrame = self.inputTextField.frame;
inputTextFieldFrame.size.height = TEXTVIEW_MAX_HEIGHT_IN_USE;
inputTextFieldFrame.origin.y = TEXTVIEW_ORIGIN_Y;
self.inputTextField.frame = inputTextFieldFrame;
}
else if (neededHeight != previousHeight)
{
previousHeight = neededHeight;
CGRect inputTextFieldFrame = self.inputTextField.frame;
inputTextFieldFrame.size.height = TEXTVIEW_MAX_HEIGHT_IN_USE;
inputTextFieldFrame.origin.y = TEXTVIEW_ORIGIN_Y;
self.inputTextField.frame = inputTextFieldFrame;
}
}
}
【问题讨论】:
-
也许你可以上传你用来调整文本视图大小的代码?
-
刚刚编辑了问题,添加了代码块来调整textview的大小,self.inputTextField是UITextView
-
您的代码似乎没有任何问题。尝试放置 previousHeight = requiredHeight;在 if(!self.inputTextField.scrollEnabled) 循环中,看看它是否有效。
-
err... UITextView 已添加到 InterfaceBuilder 中,这是否会导致我的问题?
-
应该不是问题,除非您忘记设置 outlet 和 ibaction 参考。