2014-09-25 26 views
2

在我的应用程序中,我有一个UIScrollView,它有一些文本框,如果这些文本框被编辑了,它们可能碰巧放在键盘下。我处理这与该行:UIScrollView程序滚动不起作用iOs 8

[_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只是简单地跳过语句来下单,并实现了滚动委托方法

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

,并插入一个断点有没有效果,使用

[_scrollView scrollsToTop]; 

反而也没有效果。所以编程滚动似乎完全没有影响。在升级到iOs 8 SDK之前,这工作得很好。有没有人有一个想法可能会导致这种情况?

+0

从哪种方法调用'scrollRectToVisible:'和/或'scrollsToTop'? – 2014-09-25 13:29:40

+0

- (void)keyboardOnScreen:(NSNotification *)notification 当键盘在屏幕上时,它在ViewController中触发,它在应用程序中从线程1调用。 – Oz0234 2014-09-25 13:34:58

+0

以编程方式滚动滚动视图不会触发其代表。此外,scrollsToTop不会将滚动视图滚动到顶部,它的布尔值表示用户在状态栏上点击时是否应滚动到顶部。 – 2014-09-25 13:57:33

回答

2

ScrollRectToVisible可能不滚动,因为视图可能认为键盘向上动画时“rect”已经可见。

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

UIKeyboardWillHideNotificationUIKeyboardDidHideNotification

+0

只是自己达成了这个结论,不过谢谢。 – Oz0234 2014-09-25 14:12:50

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

反向而是一切完美的作品。