UITextView keyboardDismissMode Bug

Din*_*ino 19 xcode uiscrollview uitextview ios ios7

我刚刚发现了一个令人烦恼的bug,它的新keyboardDismissMode属性scroll view.当使用带有text view值的a UIScrollViewKeyboardDismissModeInteractive并且键盘被解除时,scroll view似乎在它继续减速之前跳到顶部.

我已向Apple提交了一份错误报告,但需要解决方法.我已经尝试了DAKeyboardControl没有新的iOS7支持,幕后使用它keyboardDismissMode,它仍然做到这对我来说表明这是一个更深层次的问题.

有什么建议?

Eri*_*eaf 0

似乎是一个错误或只是一个不理想的默认状态。但根据测试项目中的代码,经过一些微调后,类似下面的代码可能会起作用。

示例代码有两个问题,一是当键盘​​出现时,您没有对文本的大小进行任何操作,因此您无法使用或查看键盘下的文本。还有其他解决方案,但一个快速而肮脏的解决方案是更改帧大小(在提交应用程序中,我还会获取动画信息并对视图帧更改进行动画处理以匹配键盘动画,这超出了本问题的范围)。您可以在“willShow”等中执行此操作,然后在“didHide”等中将其带回。

然后,内容偏移量在隐藏时会被捏造,并且当您在隐藏和滚动视图更改的回调之前和周围将其拖离屏幕时,确实会出现一些奇怪的状态。我只是保存状态并在键盘消失并且更新了文本视图后“修复”它。

我在故事板中创建了一些属性和一个出口来修改文本视图。

- (无效)viewDidLoad
{
    [超级viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(keyboardWillShow:) 名称:UIKeyboardWillShowNotification 对象:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(keyboardDidHide:) 名称:UIKeyboardDidHideNotification 对象:nil];
}

- (void)keyboardWillShow:(NSNotification *)通知
{
    NSDictionary * info = [通知用户信息];
    CGSize 大小 = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    CGRect 矩形 = self.textView.frame;
    矩形.尺寸.高度 -= 尺寸.高度;
    self.textView.frame = 矩形;
}

- (void)keyboardDidHide:(NSNotification *)通知
{
    NSLog(@"====== KeyboardDidHide =======");

    NSDictionary * info = [通知用户信息];
    CGSize 大小 = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    CGRect 矩形 = self.textView.frame;
    矩形.尺寸.高度 += 尺寸.高度;
    self.textView.frame = 矩形;


    self.hidingKeyboard = 是;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"%f",scrollView.contentOffset.y);
    if(self.hidingKeyboard == YES)
    {
        scrollView.contentOffset = self.lastOffset;
        self.hidingKeyboard = NO;
        NSLog(@"======重置=======");
    }
    别的
        self.lastOffset=scrollView.contentOffset;
}