在我的appDelegate中,我重写touchesBegan来检测何时单击状态栏:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];

    CGPoint location = [[[event allTouches] anyObject] locationInView:kWindow];
    CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;

    if (CGRectContainsPoint(statusBarFrame, location)) {
        ///do something
    }
}

在iOS 13之前,此功能有效;在iOS 13上则没有。该方法从不执行。我怎样才能解决这个问题?

最佳答案

经过研究,我发现状态栏不再是iOS13上应用程序的一部分,而是系统UI(“跳板”)的一部分。您需要通过UIStatusBarManager访问它

因此,这不再起作用:

CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;

在iOS 13中,您需要像下面这样获取StatusBar框架:
UIStatusBarManager *manager = [UIApplication sharedApplication].keyWindow.windowScene.statusBarManager;
CGRect statusBarFrame = manager.statusBarFrame;

关于objective-c - iOS13:如何检测状态栏的单击事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57324218/

10-10 18:00