Tab bar background is missing on iOS 7.1 after presenting and dismissing a view controller

后端 未结 3 1256
暖寄归人
暖寄归人 2020-12-08 21:34

I\'ve tried my app on iOS 7.1 and I found that the tab bar background disappears on a few occasions. I was able to track them down; it happens when:

  • pushing a
3条回答
  •  青春惊慌失措
    2020-12-08 22:09

    Fix found!

    So after some investigating (and headache), I found out that there is a simple fix. Just toggle the translucent property, like this:

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


    Now as for when to do this, there are several places for each case:

    1) pushing viewController with hidesBottomBarWhenPushed = YES
    The bar background disappears right after the pop animation finishes, so add the fix to the viewDidAppear: method of the viewController that presented it:

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


    2) Presenting a view controller and then dismissing it:
    In this case, the tab bar background is already gone during the dismiss animation. You can either do it in each viewController that you present separately, or, if you have subclassed UITabBarController (like I have), you can add it into its viewWillAppear method. Just be aware that calling the fix right away won't help (I've tried); that's why I used the dispatch_after GCD function:

    - (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;
        });
        ...
    }
    


    I know this is not the cleanest way, but it's clearly bug on Apple's side, and it's likely to stay with us for a while (I assume there won't be any iOS 7.2, so we'll most likely be stuck with this until iOS 8 comes out).

提交回复
热议问题