iOS7 UITextView scrollEnabled = YES height

L.C*_*Tan 5 textview ios ios7

我正在做一个测试项目,并遇到了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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Inf*_*mes 2

才华横溢的 Pete Steinberger 在 UITextView 方面遇到了很多问题,并因此实施了很多修复。

您可以在这里找到他的文章以及他的代码的链接。

对于代码的直接链接,可以在这里找到,但我建议阅读这篇文章。