【问题标题】:UIWebView not won't "scrollsToTop" on iOS 7?UIWebView 在 iOS 7 上不会“scrollsToTop”吗?
【发布时间】:2013-10-04 12:10:00
【问题描述】:

我在一个ViewController 中有两个UIWebView,以便在后台为“下一页”预加载一个。

自从在 Xcode 5 中打开项目后,当点击状态栏时,这些不再滚动到顶部。

该应用程序在 iOS 7 上运行良好,所以我不知道出了什么问题。当UIWebView 之一被隐藏时,我也setScrollsToTop:NO ...所以显然我缺少一些东西。

有什么想法吗?

【问题讨论】:

  • 只是界面生成器.....

标签: ios objective-c uiscrollview ios7


【解决方案1】:

使用这个类别:

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 个具有 scrollsToTop == YES 的 UIScrollView 时,您的 scrollsToTop 手势应该可以正常工作。

在我的例子中,logViewHierarchy 报告说你所有的滚动视图都有scrollsToTop = NO,你不知道为什么,因为我明确地将它们设置为YES。 原来我在我的项目中留下了this UIScrollView category,它在我所有的 UIScrollViews 上重载了一些方法。当我从我的项目中删除该类别时,我能够从logViewHierarchy 获得正确的输出。然后我玩弄代码,直到我只得到一个scrollsToTop = YES

【讨论】:

    【解决方案2】:

    我已经为这个特定问题编写了一个简单的类。在我的应用程序中,我们有多个 webviews 和 scrollviews。这使这一切变得容易得多。

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

    【讨论】:

    • 老实说,我找到的解决方案只是监听顶部 20 像素的“点击”区域,并将具有“滚动”功能的任何内容滚动到顶部,并将动画设置为“是”。它不漂亮,但它有效。 — 下次遇到此问题时,我会检查您的解决方案。
    • 这是一个有趣的方法:)
    • @ancajic 好吧,您是否完全按照要点进行了操作?在 appdelegate 中包含方法调用?你能创建一个演示项目吗?
    • 如果我想帮助你,你必须给我更多信息。
    • 没关系,我选择不使用类别并让它工作。但我相信它也适用于类别。我一定是错误地配置了滚动视图委托方法。
    猜你喜欢
    • 2011-01-11
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2014-08-06
    • 2013-10-02
    相关资源
    最近更新 更多