显示和解除视图控制器后,iOS 7.1上的选项卡栏背景缺失
我在iOS 7.1上试过我的应用程序,发现标签栏背景在几次消失。 我能够追查他们; 它发生在:
- 推动视图控制器放置在导航控制器(这是在标签栏控制器内)与
hidesBottomBarWhenPushed = YES
- 呈现一个视图控制器,然后解散它(即
MFMailComposeViewController
)
我创build了一个示例应用程序(使用标签栏模板+添加button来显示视图控制器,和一个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:@[@"support@routieapp.com"]]; [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上(写这篇文章的最后一代)。
你们有没有同样的问题? 你能解决吗? 谢谢!
更新:我find了一个解决方法。 看到我的答案在下面。
修复发现!
所以经过一些调查(头痛)后,我发现有一个简单的解决方法。 只需切换translucent
属性,如下所示:
tabBar.translucent = NO; tabBar.translucent = YES;
至于什么时候这样做,每个案件有几个地方:
1)用hidesBottomBarWhenPushed = YES
推viewController
在popupanimation完成后,小节背景消失,因此将该解决scheme添加到显示它的viewController的viewDidAppear:
方法中:
- (void)viewDidAppear:(BOOL)animated { self.navigationController.tabBarController.tabBar.translucent = NO; self.navigationController.tabBarController.tabBar.translucent = YES; ... }
2)呈现视图控制器,然后解散它:
在这种情况下,在解散animation期间标签栏背景已经消失。 你可以在每个viewController中单独显示,或者如果你有子类UITabBarController
(就像我有),你可以将它添加到它的viewWillAppear
方法。 只要知道,立即调用修复程序将无济于事(我试过); 这就是为什么我使用dispatch_after GCD函数:
- (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; }); ... }
我知道这不是最干净的方式,但它显然是苹果方面的bug,并且可能会留在我们身边一段时间(我假设不会有任何iOS 7.2,所以我们很可能会一直这样iOS 8出来)。
已经有一段时间了,所以我会重新讨论这个问题。 iOS 7(在设备上)标签栏在设备上变得完全透明,但在模拟器上正常工作。 在从具有hidesBottomBarWhenPushed
启用的详细信息页面点击Back
后出现。
设置Tab Bar Controller
> Tab Bar
> Storyboard
White Color
Background
固定为我。 此修复程序保持半透明完整。
出于某种原因,切换tabBar.translucent
closures和再次在ViewDidAppear
没有为我工作。
在Swift中使用Xcode 6.3.1。
进入你的Main.storyboard并select你的MKMapView来突出显示它(参见导航区域,你可以select“地图视图”)。 然后仔细看底部“白色方块”在哪里:把它移到底部的吧台! 在尺寸检查器中,您可以检查放置该视图的“锚点”或查看原点的位置(请参阅项目的左上angular)。 这就解释了为什么iPhone 5拥有更大的屏幕高度是可以的。