键盘消失时,UIScrollView 不会向下滚动到其原始位置

Posted

技术标签:

【中文标题】键盘消失时,UIScrollView 不会向下滚动到其原始位置【英文标题】:UIScrollView do not scroll down to its original position when keyboard disappear 【发布时间】:2017-10-19 18:31:58 【问题描述】:

我面临着非常奇怪的情况。当键盘出现在某些 UITextView 上时,我想向上滚动 UIScrollView 以使其可见,并且这部分代码工作正常。但是当键盘消失时,scrollView 并没有回到原来的位置。当我拖动它时,它会回到原来的位置。以下是我所做的。请指导我错过了什么

- (void)keyboardWillHide:(NSNotification *)notification 
    NSDictionary* info = [notification userInfo];
    kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    CGRect commentViewFrame = self.detailCommentView.frame;
    commentViewFrame.origin.y += kbSize.height;

    [UIView animateWithDuration:0.3 animations:^
        [self.detailCommentView setFrame:commentViewFrame];
        self.scrollView.contentOffset = CGPointMake(0, self.detailCommentView.frame.origin.y - 90);
     completion:^(BOOL finished) 
    ];


- (void)keyboardWillShow:(NSNotification *)notification 
    NSDictionary* info = [notification userInfo];
    kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    CGRect commentViewFrame = self.detailCommentView.frame;
    commentViewFrame.origin.y -= kbSize.height;
    [UIView animateWithDuration:0.3 animations:^

        [self.detailCommentView setFrame:commentViewFrame];
        self.scrollView.contentOffset = CGPointMake(0, self.detailCommentView.frame.origin.y + 90);
     completion:^(BOOL finished) 
    ];

【问题讨论】:

【参考方案1】:

我会盲目地尝试使用UIKeyboardFrameEndUserInfoKey 而不是UIKeyboardFrameBeginUserInfoKey 看看它是否有效。

否则,当您隐藏键盘时,我会检查 commentViewFrame 的值是否正确。

还有一件事我不知道是否正确。在keyboardWillShow 中,您引用的是self.detailCommentView.frame.origin.y,但在keyboardWillHide 中,您引用的是self.dopDetailCommentView.frame.origin.y。没事吧?

【讨论】:

我的错,正确的是self.detailCommentView.frame.origin.y。让我现在编辑它,也感谢您的回复。让我检查它是否有效。 我无法理解您解决方案的第一部分。请你分享一些代码。谢谢 我会尝试在您的代码中将UIKeyboardFrameBeginUserInfoKey 替换为UIKeyboardFrameEndUserInfoKey,看看它是否有效 我已经更换了它,但什么也没发生。 commentViewFrame 值也是正确的。【参考方案2】:

我找到了解决方案。实际上,滚动视图背后的概念对我来说并不清楚。但现在很清楚,只改变一行就成功了。

- (void)keyboardWillHide:(NSNotification *)notification 
    NSDictionary* info = [notification userInfo];
    kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    CGRect commentViewFrame = self.detailCommentView.frame;
    commentViewFrame.origin.y += kbSize.height;

    [UIView animateWithDuration:0.3 animations:^
        [self.detailCommentView setFrame:commentViewFrame];
        self.scrollView.contentOffset = CGPointMake(0, 0);
     completion:^(BOOL finished) 
    ];

【讨论】:

以上是关于键盘消失时,UIScrollView 不会向下滚动到其原始位置的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 不会一直向上/向下滚动

我设置滚动视图偏移以显示被键盘隐藏的文本字段。如果用户在显示键盘时滚动,则滚动视图会向下捕捉

UIScrollView 在不同的设备上运行时不会滚动或部分滚动 swift

UIScrollView - 无法向下滚动很远(即使我已将 contentsize 设置为 1000)[重复]

关闭 UIScrollView 中的键盘

键盘出现多次时,滚动视图不会向上移动