20

我在 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:@[@"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(撰写本文时的最后一代)。

你们中有人有同样的问题吗?你能修好它吗?谢谢!

更新:我找到了解决方法。请看下面我的回答。

4

3 回答 3

23

修复找到了!

因此,经过一番调查(和头痛),我发现有一个简单的修复方法。只需切换translucent属性,如下所示:

tabBar.translucent = NO;
tabBar.translucent = YES;


至于什么时候做,每种情况都有几个地方:

1)push viewController with hidesBottomBarWhenPushed = YES
the bar background 在pop动画结束后立即消失,所以在viewDidAppear:呈现它的viewController的方法中添加修复:

- (void)viewDidAppear:(BOOL)animated {
    self.navigationController.tabBarController.tabBar.translucent = NO;
    self.navigationController.tabBarController.tabBar.translucent = YES;
    ...
}


2) 呈现视图控制器然后将其关闭:
在这种情况下,标签栏背景在关闭动画期间已经消失。您可以在单独呈现的每个 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;
    });
    ...
}


我知道这不是最干净的方法,但它显然是苹果方面的错误,它可能会在我们身边停留一段时间(我假设不会有任何 iOS 7.2,所以我们很可能会一直坚持下去,直到iOS 8 出来了)。

于 2014-03-12T10:06:38.780 回答
0

已经有一段时间了,所以我将重申这个问题。iOS 7(在设备上)标签栏在设备上变得完全透明,但在模拟器上工作正常。Back从已hidesBottomBarWhenPushed启用的详细信息页面点击后似乎会发生。

Tab Bar Controller> Tab Bar>设置BackgroundWhite ColorStoryboard我修复它。此修复程序保持半透明完好无损。

出于某种原因,tabBar.translucent重新打开和关闭ViewDidAppear对我不起作用。

将 Xcode 6.3.1 与 Swift 一起使用。

于 2015-06-18T18:17:26.787 回答
-1

进入您的 Main.storyboard 并选择您的 MKMapView 以突出显示它(参见在 Navigator 区域中,您可以选择 « Map View »)。然后仔细看底部的“白色方块”在哪里:将它向上移动到底部栏!在尺寸检查器中,您可以检查放置“锚”的位置或该视图的视图原点(参见项目的左上角)。这就解释了为什么屏幕更大的 iPhone 5 没问题。

于 2014-03-11T16:11:59.603 回答