我有两个UIWebView
合二为一ViewController
,以便在后台为“下一页”预加载一个。
由于在 Xcode 5 中打开项目,当点击状态栏时,这些不再滚动到顶部。
该应用程序在 iOS 7 上运行良好,所以我不知道出了什么问题。当其中一个UIWebView
被隐藏时,我也setScrollsToTop:NO
......所以很明显我错过了一些东西。
有任何想法吗?
我有两个UIWebView
合二为一ViewController
,以便在后台为“下一页”预加载一个。
由于在 Xcode 5 中打开项目,当点击状态栏时,这些不再滚动到顶部。
该应用程序在 iOS 7 上运行良好,所以我不知道出了什么问题。当其中一个UIWebView
被隐藏时,我也setScrollsToTop:NO
......所以很明显我错过了一些东西。
有任何想法吗?
我已经为这个特定问题编写了一个简单的类。在我的应用程序中,我们有多个 webviews 和 scrollviews。这使这一切变得容易得多。
使用这个类别:
UIView+LogViewHierarchy.h
#import <UIKit/UIKit.h>
@interface UIView (LogViewHierarchy)
-(void) logViewHierarchy;
@end
UIView+LogViewHierarchy.m
#import "UIView+LogViewHierarchy.h"
@implementation UIView (LogViewHierarchy)
-(void) logViewHierarchy
{
NSLog(@"%@%@", NSStringFromClass(self.class), NSStringFromCGRect(self.frame));
[self logSubviews:self depth:1];
}
-(void) logSubviews:(UIView*)view depth:(NSInteger)depth
{
for (UIView *subview in view.subviews) {
if ([subview isKindOfClass:[UIScrollView class]]) {
NSLog(@"%@%@%@ - scrollsToTop: %@", [self paddingString:depth], NSStringFromClass(subview.class), NSStringFromCGRect(subview.frame), ((UIScrollView*)subview).scrollsToTop ? @"YES" : @"NO");
} else {
NSLog(@"%@%@%@", [self paddingString:depth], NSStringFromClass(subview.class), NSStringFromCGRect(subview.frame));
}
[self logSubviews:subview depth:depth+1];
}
}
-(NSString*) paddingString:(NSInteger)depth
{
return [@"" stringByPaddingToLength:depth*2 withString:@" " startingAtIndex:0];
}
@end
然后找到您应用的根视图控制器并添加:
-(void) viewDidAppear:(BOOL)animated
{
[self.view logViewHierarchy];
}
您将能够看到所有 UIScrollView 及其scrollsToTop
属性。当您设法使输出看起来只有 1 个 UIScrollView 时,scrollsToTop == YES
您的scrollsToTop手势应该可以正常工作。
就我而言,logViewHierarchy
报告您所有的滚动视图都有scrollsToTop = NO
,而您不知道为什么,因为我明确将它们设置为YES
. 原来,我把这个 UIScrollView 类别留在了我的项目中,它在我所有的 UIScrollView 上重载了一些方法。当我从我的项目中删除该类别时,我能够从logViewHierarchy
. 然后我玩弄代码,直到我设法只得到一个scrollsToTop = YES
.