我的应用有UITableView
。 UITableView有一个标题视图,它是UIWebView
。
默认情况下,滚动视图的scrollsToTop
属性设置为YES
,这样用户就可以点按状态栏滚动到滚动视图的顶部。
如果一个视图中嵌入了两个滚动视图,并且它们的scrollsToTop
属性都设置为YES
,则点按状态栏不会执行任何操作。
解决方案是将scrollsToTop
个属性之一设置为NO
。这会重新启用状态栏。
现在问题是:UIWebView没有公开它的滚动视图,因此无法访问它的scrollsToTop
属性。我只希望在点击状态栏时滚动到顶部,而不是Web视图。
有谁知道我怎么做到这一点?
答案 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的委托方法?