2014-02-13 117 views
1

在以下代码示例中,self.contentView指的是UIScrollViewUIScrollView无法滚动到iOS 7底部

// Scroll to bottom. 
CGPoint bottomOffset = CGPointMake(0, self.contentView.contentSize.height - 
            self.contentView.bounds.size.height); 
if (bottomOffset.y >= 0.0) 
{ 
    [self.contentView setContentOffset:bottomOffset animated:YES]; 
} 

奇怪的是,在IOS 6这个工作完全正常,但在IOS 7滚动视图(假定它有一个contentSize这是垂直大于它的frame.size.height)仅滚动到最底部子视图加入到最底部滚动视图。

例如,如果在下列情况下成立:

self.contentView.frame.size.height == 50.0 
self.contentView.contentSize.height == 100.0 

aSubView.frame.origin.y == 50.0 
aSubView.frame.size.height == 20.0 

滚动代码只会滚动,直至aSubView可见; self.contentView.contentOffset.y == 20.0而不是self.contentView.contentOffset.y == 50.0,它将位于整个滚动视图的底部。

这是(当然)发生,直到以编程方式将另一个子视图添加到self.contentView(通过用户交互),然后一切都自行纠正。

为了清楚起见,我在滚动代码之前和之后设置断点以测量对self.contentView.contentOffset的更改。

其他有趣的事实,如果我删除animated并直接设置contentOffset它在iOS 7上按预期工作,但我更喜欢保留动画。

注:不使用界面生成器

回答

5

所以我相当迅速地想出了一个相当不令人满意的解决方案通过包装在一个异步调度模块调用。

// Scroll to bottom. 
CGPoint bottomOffset = CGPointMake(0, self.contentView.contentSize.height 
            - self.contentView.bounds.size.height); 
if (bottomOffset.y >= 0.0) 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.contentView setContentOffset:bottomOffset animated:YES]; 
    }); 
} 

如果有人明白什么是真正造成问题的原因,并能提供更好的解决方案我会欣然接受的答案,但对于其他人处理同样的问题希望这对你的作品也是如此。

+0

为什么不令人满意?动画代码应该始终在主线程上运行,并且只需确保它与此相关即可。您需要强制执行的内在原因以及应用程序不会自动使其在主线程上运行必须与某些可能只有Apple工程师才能解释的内部工作相关。 – manecosta

+2

这是不令人满意的,因为代码已经在iOS 6中没有调度块的情况下工作,而且这个代码只能在主线程上执行,所以它应该在没有额外的调度块的情况下工作。 事实上,我必须强制程序等待,直到当前的Runloop循环完成,执行该代码行之前的任何操作都会显示缺少对调用该方法时发生的事情的理解。 –

+1

这种行为很奇怪。强制使用主队列解决了我遇到的滚动问题...谢谢你的帮助。 – Vico

0

禁用“Adjust Scroll View Insets”为我解决了这个问题。 (Xcode中6,的iOS 8)

UIScrollView Not Scrolling

+0

没有涉及到笔尖。你知道这个程序的等价物吗? –

+0

'self.automaticallyAdjustsScrollViewInsets = NO;' – RPM

7

只有一条线路..你可以滚动到下..!

[yourScrollview scrollRectToVisible:CGRectMake(yourScrollview.contentSize.width - 1, yourScrollview.contentSize.height - 1, 1, 1) animated:YES]; 
+0

This Worked for me !!!真棒! – Mangesh