iPhone IOS:删除/添加后,点击状态栏滚动到顶部不起作用

时间:2009-09-01 10:02:58

标签: iphone cocoa-touch iphone-sdk-3.0

使用此方法隐藏状态栏:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

当将“隐藏”设置回NO时,点击滚动到顶部(在UIWebView,UITableView等等)不再起作用,并且需要重新启动应用程序才能恢复功能。

这是一个错误(无论如何我提交了一个rdar)还是我错过了一步?我是否应该期待这种行为,因为statusBar以某种方式与相应的视图“失去联系”?

9 个答案:

答案 0 :(得分:18)

重新显示后,您可以尝试再次将ScrollsToTop属性设置为true:

[currentView setScrollsToTop:YES];

如果这不起作用,你肯定只展示一个视图吗?如果有多个滚动视图,则忽略scrollViewDidScrollToTop消息...

答案 1 :(得分:10)

在iOS 5.0中,您可以访问UIWebView的scrollview属性

webView.scrollView.scrollsToTop = YES;

答案 2 :(得分:7)

Alex的以下修复为我工作。谢谢!

((UIScrollView *)[[webView subviews] objectAtIndex:0]).scrollsToTop = NO;

匆忙这个修复很有效,但是如果有更多的时间,我可能会将UIWebView子类化,并直接访问受保护的UIScrollView成员。

我对Alex'方法的担心是它假设UIScrollView位于子视图的索引零处(封装允许私有成员更改)。这表明另一种解决方案仍然存在:

for (UIView* v in [webView subviews])
{
    if ([v isKindOfClass:[UIScrollView class]])
    {
        (UIScrollView *)v.scrollsToTop = NO;
    }
}

答案 3 :(得分:5)

您可以使用以下代码让UIWebView忽略scrollToTop而无需额外的UIScrollView

((UIScrollView *)[[webView valueForKey:@"_internal"] valueForKey:@"scroller"]).scrollsToTop = NO;

答案 4 :(得分:5)

我遇到了类似的问题,其中滚动到顶部的功能丢失了。事实证明,只有在一次只有一个活动视图时(在同一个滚动视图中),这才会起作用。在我的情况下,我有一个表视图和另一个淡入/淡出的视图。在动画结束时添加removeFromSuperview就可以了。

答案在UIScrollView.h文件评论中:

/*
 this is for the scroll to top gesture. by default, a single scroll visible scroll view with this flag set will get the call. if there is more than one visible with this
 flag set or the delegeat method returns NO, the view isn't scrolled 
 */
@property(nonatomic) BOOL  scrollsToTop;          // default is YES. if set, special gesture will scroll to top of view after consulting delegate

答案 5 :(得分:3)

在我的应用中播放Youtube视频后,我遇到了类似的问题。 scrollsToTop仍设置为YES,但点击状态栏无效。

我终于意识到我的应用程序窗口不再是关键窗口了。将以下行添加到UIWindow子类(由于其他原因我已经拥有)之后,所有内容都应该再次运行:

if (![self isKeyWindow]) [self makeKeyWindow];

答案 6 :(得分:0)

我刚刚在我正在处理的应用中遇到了类似的行为。在这种情况下,如果您从UIWebView中加载YouTube视频,请滚动到顶部停止,以便在应用程序的其余生命周期中工作。我有点认为这可能在加载电影播放器​​后发生,但尚未确认。该功能已经存在了很长时间,并且可能有更少的错误。

答案 7 :(得分:0)

当有多个scrollview时,您还可以将其他scrollview的scrollUpToTop设置为NO。比照:

setScrollsToTop with multiple UIScrollView classes and/or subclasses(UITableView)

答案 8 :(得分:0)

我想添加我的案例,我在UIScrollView上添加了一个UIWebView,h4xxr已在顶部回答:

  

如果有多个滚动视图,则忽略scrollViewDidScrollToTop消息

所以,我得到一个简单的方法让它在webView上运行:只需将scrollView的scrolllsToTop属性设置为false即可。

当点击状态栏时,它不会被scrollView截获,并且webView会滚动到顶部!

    UIScrollView *scrollView = [[UIScrollView alloc] init];
    scrollView.frame = self.view.bounds;
    scrollView.scrollsToTop = false; //igore scrollView`s scrollsToTop
    [self.view addSubview:scrollView];

    UIWebView *webView = [[UIWebView alloc] init];
    webView.frame = scrollView.bounds;
    [scrollView addSubview:webView];