UIScrollView程序化滚动不工作iOs 8

时间:2014-09-25 13:25:31

标签: ios objective-c uiscrollview ios8

在我的应用程序中,我有一个带有一些文本字段的UIScrollView,如果这些文本字段被编辑,它们可能恰好放在键盘下面。我用这一行处理了这个问题:

[_scrollView setFrame:CGRectMake(_scrollView.frame.origin.x, _scrollView.frame.origin.y, _scrollView.frame.size.width, _scrollView.frame.size.height - (_keyboardHeight - 44))];
[_scrollView scrollRectToVisible:_destinationFrame animated:YES];

如果我打破这些陈述,一切似乎都是有序的,内容大小正确,滚动视图的框架是正确的,并且收到的目标框架是正确的,踩到scrollRectToVisible只是简单地将语句跳到下一个一,并实现scrollView委托方法

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

并使用

插入断点无效
[_scrollView scrollsToTop];

相反也没有效果。所以程序化滚动似乎绝对没有效果。在升级到iOs 8 SDK之前,这完全正常。有没有人知道可能导致这种情况的原因?

2 个答案:

答案 0 :(得分:2)

ScrollRectToVisible可能无法滚动,因为视图可能会认为" rect"当键盘向上动画时已经可见。

我总是通过监听事件UIKeyboardDidShowNotification来处理这个问题,然后将滚动视图的contentOffset调整为带有一些填充的rect的Y原点。您可能还希望在此时增加内容大小,以避免当用户在键盘启动时尝试滚动屏幕​​时出现捕捉行为。

撤消UIKeyboardWillHideNotificationUIKeyboardDidHideNotification

中的所有内容

答案 1 :(得分:0)

    if(_scrollView.contentOffset.y + _destinationFrame.origin.y > _keyboardHeight)
    {
        [_scrollView setContentOffset:CGPointMake(_scrollView.contentOffset.x, _destinationFrame.origin.y - _keyboardHeight )];
    }

相反,效果很好。