Ios UIScrollView setContentOffset:动画:怪异行为

Ios UIScrollView setContentOffset:动画:怪异行为,ios,objective-c,uiscrollview,uitextfield,Ios,Objective C,Uiscrollview,Uitextfield,我使用的是一个包含两个文本字段的滚动视图。当文本字段“开始编辑”时,我执行3个操作: 我更改了滚动视图内容插入(以便整个视图在键盘上方变得清晰可见)。我只会这样做,如果它还没有固定到这个内容插入 我还更改了滚动指示器插图,以匹配1中的一个 最后,我将滚动视图内容偏移更改为某个特定值 然而,一件奇怪的事情发生了。单击文本字段后,滚动视图将设置为大于特定值的内容偏移动画,然后立即返回到该特定值 我怀疑第1步和第2步都是原因,所以我排除了它们,一切正常。然而,这让我的部分滚动视图隐藏在键盘下方 编辑:

我使用的是一个包含两个文本字段的滚动视图。当文本字段“开始编辑”时,我执行3个操作:

  • 我更改了滚动视图内容插入(以便整个视图在键盘上方变得清晰可见)。我只会这样做,如果它还没有固定到这个内容插入

  • 我还更改了滚动指示器插图,以匹配1中的一个

  • 最后,我将滚动视图内容偏移更改为某个特定值

  • 然而,一件奇怪的事情发生了。单击文本字段后,滚动视图将设置为大于特定值的内容偏移动画,然后立即返回到该特定值

    我怀疑第1步和第2步都是原因,所以我排除了它们,一切正常。然而,这让我的部分滚动视图隐藏在键盘下方

    编辑:以下是我使用的代码(在文本字段开始编辑时调用):


    假设C_SCROLL\u VIEW\u CONTENT\u INSET\u BOTTOM是常量,我认为该值是错误的(太大)。

    请发布有问题的代码。您是否已将UIView更改为scrollView??或者您已经分配了它并试图通过以下行访问它:'UIScrollView*scrollView=(UIScrollView*)self.view;'我的UIView实际上是一个滚动视图。这就是我添加这一行的原因。你找到这个问题的答案了吗?我现在也有同样的问题。
            UIScrollView *scrollView = (UIScrollView *) self.view;
    
            if (scrollView.contentInset.bottom != C_SCROLL_VIEW_CONTENT_INSET_BOTTOM) {
                [scrollView setContentInset:UIEdgeInsetsMake(C_ORIGIN_ZERO,
                                                             C_ORIGIN_ZERO,
                                                             C_SCROLL_VIEW_CONTENT_INSET_BOTTOM,
                                                             C_ORIGIN_ZERO)];
                [scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(C_ORIGIN_ZERO,
                                                                      C_ORIGIN_ZERO,
                                                                      C_SCROLL_VIEW_CONTENT_INSET_BOTTOM,
                                                                      C_ORIGIN_ZERO)];
            }
    
            if (textField.tag == C_TAG_BUTTON) {
                [scrollView setContentOffset:CGPointMake(C_ORIGIN_ZERO, C_ORIGIN_SHIFT_SCROLL_VIEW_FOR_CURRENT_Y)
                                    animated:YES];
                return;
            }