【问题标题】:UIScrollView scrollToTop not getting called for iPhoneUIScrollView scrollToTop 没有被 iPhone 调用
【发布时间】:2012-07-18 20:27:58
【问题描述】:

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

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

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

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

【问题讨论】:

标签: iphone objective-c ios ipad


【解决方案1】:

查看my answer 来了解您所讨论的问题。我刚刚添加了它。

编辑

我没有自己做的原始代码,但应该是这样的:

-(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];
        }
    }
}

【讨论】:

    【解决方案2】:

    我刚刚拿了@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];
        }
    }
    

    或者没有 cmets:

    + (void)globalDisableScrollToTop:(UIView *)_view;
    {
        if ([_view isKindOfClass:[UIScrollView class]])
            ((UIScrollView *)_view).scrollsToTop = NO;
    
        for (UIView *view in _view.subviews)
            [self globalDisableScrollToTop:view];
    }
    

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

    【讨论】:

      【解决方案3】:

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

      如果有帮助,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多