我在iOS 7.1上尝试了我的应用程序,但发现标签栏背景在某些情况下会消失。我能够找到他们。它发生在以下情况:
hidesBottomBarWhenPushed = YES
MFMailComposeViewController
)我已经创建了一个示例应用程序(使用标签栏模板+添加的按钮来显示视图控制器,以及一个mapView来判断该栏是否消失了),问题就在那里。
这是我更改的示例应用程序的所有代码:
#import "FirstViewController.h"
@import MessageUI;
@interface FirstViewController () <MFMailComposeViewControllerDelegate>
@end
@implementation FirstViewController
- (IBAction)presentVCButtonPressed:(id)sender {
if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
mailer.mailComposeDelegate = self;
[mailer setSubject:@"Feedback for Routie"];
[mailer setToRecipients:@[@"[email protected]"]];
[self presentViewController:mailer animated:YES completion:nil];
}
}
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
在这里,您可以下载整个示例项目。
现在,重要的事情:这似乎不会影响iPhone 5,也不影响模拟器。问题出在iPhone 4和iPod Touch(撰写本文时为上一代产品)上。
你们中有人有同样的问题吗?您能修复它吗?谢谢!
更新:我找到了一种解决方法。请在下面查看我的答案。
找到修复程序!
因此,经过一番调查(和头痛),我发现有一个简单的解决方法。只需切换translucent
属性,如下所示:
tabBar.translucent = NO;
tabBar.translucent = YES;
现在,什么时候执行此操作,每种情况下都有几个位置:
1)用推动viewControllerhidesBottomBarWhenPushed = YES
在弹出动画结束后,栏背景立即消失,因此将修复程序添加到viewDidAppear:
呈现它的viewController方法中:
- (void)viewDidAppear:(BOOL)animated {
self.navigationController.tabBarController.tabBar.translucent = NO;
self.navigationController.tabBarController.tabBar.translucent = YES;
...
}
2)呈现一个视图控制器,然后将其关闭:
在这种情况下,在关闭动画期间选项卡栏背景已经消失了。您可以在单独显示的每个viewController中执行此操作,或者,如果您已经继承了子类UITabBarController
(如我的子类),则可以将其添加到其viewWillAppear
方法中。请注意,立即致电修复程序无济于事(我已经尝试过);这就是为什么我使用了GCD函数dispatch_after的原因:
- (void)viewWillAppear:(BOOL)animated {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.tabBar.translucent = NO;
self.tabBar.translucent = YES;
});
...
}
我知道这不是最干净的方法,但这显然是苹果方面的错误,并且可能会在我们身边待一会儿(我认为不会有任何iOS 7.2,因此我们很可能会一直坚持下去,直到iOS 8发行)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句