20

我刚刚发现keyboardDismissMode. scroll view当将其与text view带有值UIScrollViewKeyboardDismissModeInteractive的 a 一起使用并且键盘被关闭时,scroll view似乎会在继续减速之前跳到顶部。

我已经向 Apple 提交了错误报告,但需要解决方法。我已经尝试过在没有幕后使用的DAKeyboardControl新支持的情况下,它仍然可以这样做,这对我来说表明这是一个更深层次的问题。iOS7keyboardDismissMode

有什么建议么?

4

2 回答 2

1

对于这个问题,您最好使用 scrollviewDelete 进行编码,并在您想通过 ResignFirstResponder 关闭键盘时简单地提及

于 2014-09-30T13:11:20.187 回答
0

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

示例代码有两个问题,一个是当键盘出现时你没有对文本的大小做任何事情,所以你无法使用或看到键盘下的文本。还有其他解决方案,但一个快速而肮脏的解决方案是更改帧大小(在提交应用程序中,我还将获取动画信息并为视图帧更改设置动画以匹配超出此问题范围的键盘动画)。你在'willShow'之类的东西中这样做,然后在'didHide'之类的东西中把它带回来。

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

我在情节提要中创建了一些属性和一个插座,以对文本视图进行修改。

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

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
}

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

    CGRect 矩形 = self.textView.frame;
    rect.size.height -= size.height;
    self.textView.frame = 矩形;
}

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

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

    CGRect 矩形 = self.textView.frame;
    rect.size.height += size.height;
    self.textView.frame = 矩形;


    self.hidingKeyboard = YES;
}

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"%f", scrollView.contentOffset.y);
    如果(self.hidingKeyboard == 是)
    {
        scrollView.contentOffset = self.lastOffset;
        self.hidingKeyboard = 否;
        NSLog(@"====== 重置 =======");
    }
    别的
        self.lastOffset = scrollView.contentOffset;
}
于 2013-09-26T17:11:35.247 回答