UITableView,UIWebViews和scrollsToTop属性=麻烦

时间:2010-04-23 08:44:58

标签: iphone uitableview uiwebview scroll uiscrollview

我的应用有UITableView。 UITableView有一个标题视图,它是UIWebView

默认情况下,滚动视图的scrollsToTop属性设置为YES,这样用户就可以点按状态栏滚动到滚动视图的顶部。

如果一个视图中嵌入了两个滚动视图,并且它们的scrollsToTop属性都设置为YES,则点按状态栏不会执行任何操作。

解决方案是将scrollsToTop个属性之一设置为NO。这会重新启用状态栏。

现在问题是:UIWebView没有公开它的滚动视图,因此无法访问它的scrollsToTop属性。我只希望在点击状态栏时滚动到顶部,而不是Web视图。

有谁知道我怎么做到这一点?

4 个答案:

答案 0 :(得分:3)

这个问题包含答案:

iPhone OS: Tap status bar to scroll to top doesn't work after remove/add back

之前我找不到它,因为它被问到了不同的主题,但结果却截然不同,但结果是一样的。

所以结果是遍历子视图,直到找到滚动视图。我以前在其他应用程序中完成了这个,在这种情况下没有想到它。它应该是App-Store-Safe,因为我在商店中使用了这个想法的应用程序。

UIWebView上的一个类别,用于启用或禁用滚动到顶部:

@implementation UIWebView (UIWebViewScrollToTopAdditions)

- (void)setScrollsToTop:(BOOL)scrollsToTop
{
    if ([[self subviews] count] > 0)
    {
        UIScrollView *scrollView = (UIScrollView *)[[self subviews] objectAtIndex:0];
        if ([scrollView respondsToSelector:@selector(setScrollsToTop:)])
        {
            [scrollView setScrollsToTop:scrollsToTop];
        }
    }
}

@end

答案 1 :(得分:3)

现在有一个scrollView属性,首选:

myWebView.scrollView.scrollsToTop = YES;

答案 2 :(得分:2)

这种情况经常发生,因为所有的滚动视图都有默认值。创建新的滚动视图或Web视图时,他们将scrollsToTop设置为YES。我为这个特定问题写了一个简单的类别:

-[UIScrollView makeOnlyThisScrollViewScrollToTopOnStatusBarTap];

https://gist.github.com/hfossli/6776203

它基本上将所有其他scrollView上的scrollsToTop设置为NO而不是您指定的那个+处理默认值。祝你好运!

答案 3 :(得分:0)

您是否尝试过UIScrollViewDelegate scrollViewShouldScrollToTop的委托方法?