在我的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
}
}
Run Code Online (Sandbox Code Playgroud)
在iOS 13之前,此功能有效;在iOS 13上则没有。该方法从不执行。我怎样才能解决这个问题?
经过一番研究,我发现状态栏在iOS13上不再是应用程序的一部分,它\xe2\x80\x99s是系统UI的一部分(\xe2\x80\x9cspringboard\xe2\x80\x9d)。您需要通过UIStatusBarManager访问它
\n\n所以这不再有效:
\n\nCGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;\nRun Code Online (Sandbox Code Playgroud)\n\n在iOS 13中,您需要像这样获取StatusBar框架:
\n\nUIStatusBarManager *manager = [UIApplication sharedApplication].keyWindow.windowScene.statusBarManager;\nCGRect statusBarFrame = manager.statusBarFrame;\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |