scrollToTop 在 iPhone 上不工作,但在 iPad 上工作

时间:2022-12-31
本文介绍了scrollToTop 在 iPhone 上不工作,但在 iPad 上工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有两个视图控制器.一个用于页面控制的滚动视图和一个用于详细信息的滚动视图(垂直滚动).

I have two view controller. One scrollview for page control and one for detail (scroll vertical).

当我在 iPhone 上单击状态栏时,scrollToTop 不起作用,而在 iPad 中,scrollToTop 正在工作.

When i click status bar on iPhone the scrollToTop not working, and in iPad the scrollToTop is working.

我确定 scrollView.scrollToTop 是 YES.因为我已经打印出来了.

I am sure that the scrollView.scrollToTop is YES. because i already print it.

谁知道是什么原因导致 iPhone 的 scrollToTop 不工作?

Anyone know what cause the iPhone scrollToTop not working?

谢谢

我尝试调用 scrollView 委托.在 iPad 中,这个委托被称为.- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView

I try by calling the scrollView delegate. in iPad this delegate its called. - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView

在 iPhone 中它不被调用.我已经同时使用了contentScrollView.delegate = self;但是iphone不工作:(

in iPhone it is not called. I already use both contentScrollView.delegate = self; But the iphone not working :(

尝试子类化 UIWindow(不工作)

Try subclassing UIWindow (not working)

窗口.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface Window : UIWindow
@end

窗口.m

 #import "Window.h"

 @implementation Window

 - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if ([event type] == UIEventTypeTouches && point.y < 250) {
    //Send Your Notification Here
    NSLog(@"KAROOO");
}
NSLog(@"HELLOWW");
return [super hitTest:point withEvent:event];
}
@end

AppDelegate.h

AppDelegate.h

@property (nonatomic, strong) IBOutlet Window *window;

AppDelegate.m

AppDelegate.m

@synthesize window = _window;

推荐答案

据我了解,您的屏幕上同时有 2 个 UIScrollView.

From what I understand you have 2 UIScrollViews simultaneously on screen.

据我所见&有经验的,在 iOS 4 上并排有 2 个 UIScrollView 会产生未定义的行为.其中一个滚动视图可能会滚动,有时可能会滚动,有时两者都不会.

From what I have seen & experienced, On iOS 4 having 2 UIScrollViews side by side gives undefined behaviour. One of the scrollview may scroll, sometimes other, sometimes neither.

在 iOS 5 上,如果您并排有 2 个 UIScrollView,然后点击状态栏滚动到顶部"UIScrollView 右侧在您的点击下"

On iOS 5 if you have 2 UIScrollViews side by side then tapping on status bar "scrolls to top" the UIScrollView right "under your tap"

我不知道这是如何工作的,但这是我的观察.iOS 5 很智能!!

I don't know how this works, but this has been my observation. iOS 5 is smart !!

如果您的 UIScrollViews 高于其他,则可能行为未定义.我没查过.

If your UIScrollViews are one above other then probably the behaviour is undefined. I haven't checked.

希望这会有所帮助.

如果你想让它正常工作,那么这里有一个可能的解决方案.

If you want to get it working anyways then here is a possible solution.

子类 或在 UIWindow 上添加一个类别并添加一个手势识别器/或实现仅检测 Y <的点击的 hitTest20 以此类推,然后让它发送通知并在您的 viewController 中收听,并以编程方式将 UIScrollView 滚动到顶部.

Subclass or Add a category on UIWindow and add a gesture recognizer / or implement hitTest that detects tap only for Y < 20 and so on and then have it send a notification and listen to this in your viewController and programmatically scroll the UIScrollView to top.

编辑

在 UIWindow 子类 (iPad) 中实现它

Implement this in the UIWindow subclass (iPad)

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([event type] == UIEventTypeTouches && point.y < 20 && [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait) {
        NSLog(@"Portrait");
    } else if ([event type] == UIEventTypeTouches && point.y > 1004 && [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown) {
        NSLog(@"PortraitUpsideDown");
    } else if ([event type] == UIEventTypeTouches && point.x < 20 && [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft) {
        NSLog(@"LandscapeLeft");
    } else if ([event type] == UIEventTypeTouches && point.x > 748 && [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) {
        NSLog(@"LandscapeRight");
    }
    return [super hitTest:point withEvent:event];
}

这篇关于scrollToTop 在 iPhone 上不工作,但在 iPad 上工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:iOS5、UIScrollView 和 layoutSubviews 行为 下一篇:UIScrollView 看不到 ScrollBars/Indicators.

相关文章

最新文章