UIScrollView scrollToTop 没有被 iPhone 调用

Posted

技术标签:

【中文标题】UIScrollView scrollToTop 没有被 iPhone 调用【英文标题】:UIScrollView scrollToTop not getting called for 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 中调用。

【问题讨论】:

scrollToTop is not working on iPhone but it is working on iPad的可能重复 @DavidRönnqvist ys 我已经在上面提到过,我已经阅读过 【参考方案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 属性将滚动视图设置在顶部。

如果有帮助,请告诉我。

【讨论】:

以上是关于UIScrollView scrollToTop 没有被 iPhone 调用的主要内容,如果未能解决你的问题,请参考以下文章

页面更改时的滚动恢复未完全滚动到顶部

单击后退按钮时,React-router 滚动到顶部

[React] useImperativeHandle + forwardRef

jQuery:滚动到顶部

Back To Top

Ext.Container scrollable