在我的应用程序中,我有一个带有一些文本字段的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之前,这完全正常。有没有人知道可能导致这种情况的原因?
答案 0 :(得分:2)
ScrollRectToVisible可能无法滚动,因为视图可能会认为" rect"当键盘向上动画时已经可见。
我总是通过监听事件UIKeyboardDidShowNotification
来处理这个问题,然后将滚动视图的contentOffset
调整为带有一些填充的rect的Y原点。您可能还希望在此时增加内容大小,以避免当用户在键盘启动时尝试滚动屏幕时出现捕捉行为。
撤消UIKeyboardWillHideNotification
或UIKeyboardDidHideNotification
答案 1 :(得分:0)
if(_scrollView.contentOffset.y + _destinationFrame.origin.y > _keyboardHeight)
{
[_scrollView setContentOffset:CGPointMake(_scrollView.contentOffset.x, _destinationFrame.origin.y - _keyboardHeight )];
}
相反,效果很好。