iPhone 老早的一个功能,最近好多人说iOS上有些点击状态栏不会滚到顶部,这可能是因为你的controller覆盖了状态栏,stackoverflow上找到最佳方案是这样的
AppDelegate 里面加上如下代码
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
CGPoint location = [[[event allTouches] anyObject] locationInView:self.window];
CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;
if (CGRectContainsPoint(statusBarFrame, location)) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"kStatusBarTappedNotification" object:nil];
}
}
然后在基类里面监听通知,
- (void)viewWillAppear:(BOOL)animated {
if ([[UIDevice currentDevice].systemVersion doubleValue] <= 8.0) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarTouchedAction) name:@"kStatusBarTappedNotification" object:nil];
}
}
- (void)statusBarTouchedAction {
[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([[UIDevice currentDevice].systemVersion doubleValue] <= 8.0) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"kStatusBarTappedNotification" object:nil];
}
}
完美解决。