1

我有一个通用的应用程序,代码是一样的。我有一个 UIScrollView,其中的 scrollToTop 可以在 iPad 上工作,但不能在 iPhone 上工作。我对此感到非常沮丧。

我知道这里有一个类似的帖子,但事实并非如此。在此之前,我曾经在 iPad 和 iPhone 上滚动工作。知道要寻找什么吗?

代码的结构是这样的。我有一个名为 A 的 mainVC。然后我有一个名为 B 的 VC。还有另一个名为 C 的 VC,它有一个 UIScrollView。我将 C 添加为 B 的子视图控制器。然后 B 作为 A 的子 VC。现在 C 上的滚动视图没有 scrollToTop 工作。

委托 scrollViewShouldScrollToTop 也仅在 iPad 中调用,而不在 iPhone 中调用。

4

3 回答 3

1

看看对你所说的问题的回答。我刚刚添加了它。

编辑

我没有我制作的原始代码,但它应该是这样的:

-(void)cleanUp:(UIScrollView*)view{
    if([view isKindOfClass:[UIScrollView class]]){
        view.scrollsToTop = NO;
    }else{
        for(UIScrollView* subview in view.subviews){
            if([subview isKindOfClass:[UIView class]]){
                [self cleanUp:subview];
            }
        }
    }
}

你可以这样称呼它:

[self cleanUp:self.view];

您可能还需要该例程的更严格的变体(有时您可能在 scrollView 内有一个 tableView 或类似的东西):

-(void)cleanUp:(UIScrollView*)view{
    if([view isKindOfClass:[UIScrollView class]]){
        view.scrollsToTop = NO;
    }
    for(UIScrollView* subview in view.subviews){
        if([subview isKindOfClass:[UIView class]]){
            [self cleanUp:subview];
        }
    }
}
于 2012-07-18T20:43:19.183 回答
1

我刚刚采用了@Ariel 的解决方案,做了一些改进,想和大家分享一下:

+ (void)globalDisableScrollToTop:(UIView *)_view;
{
    // Check whether we got a scroll view
    if ([_view isKindOfClass:[UIScrollView class]])
    {
        // Disable scroll to top
        ((UIScrollView *)_view).scrollsToTop = NO;
    }

    // Iterate all subviews
    for (UIView *view in _view.subviews)
    {
        // Recursive call of this method
        [self globalDisableScrollToTop:view];
    }
}

或者没有评论:

+ (void)globalDisableScrollToTop:(UIView *)_view;
{
    if ([_view isKindOfClass:[UIScrollView class]])
        ((UIScrollView *)_view).scrollsToTop = NO;

    for (UIView *view in _view.subviews)
        [self globalDisableScrollToTop:view];
}

它现在修复了所有子视图,并且可以实现为静态方法(您的根滚动视图类)。

于 2013-01-10T17:05:21.683 回答
0

如果可能,请在此处粘贴添加子视图代码。看起来问题是存在滚动视图的视图隐藏在其他视图后面。尝试更改添加子视图的顺序。或者您也可以尝试将滚动视图设置在顶部的 BringSubviewtoFront 属性。

让我知道它是否有帮助。

于 2012-07-18T21:10:22.230 回答