Reputation: 1679
I have a tab bar in my app, and the tab bar items are subclasses of UITabBarItem. After fetching an update from the server, these tab bar items set their title from code using this line:
[self setTitle:@"SomeText"];
Once this line runs, the tab bar items that were previously hidden (behind the more tab) become visible in the main tabs area, and stack on top of the other tabs. See the screenshot below. This only happens in iOS 10 (beta). Is this a bug in my code or an issue in iOS 10?
I have created a minimal XCode project and posted to Github to demonstrate the issue: https://github.com/RippleAdder/TabStacks
Upvotes: 11
Views: 2883
Reputation: 1499
This bug still happens on iOS 11.3.
In my app i had to keep the current navigation bar title and current tab title in sync, so only this solution worked:
self.navigationItem.title = "Title"
self.tabBarController?.tabBar.items![0].title = self.navigationItem.title
Thanks @shady for the idea!
I am calling this method each time i want to update the title in both nav bar and tab bar (when user changes app language)
Upvotes: 0
Reputation: 1055
I've spend more time on this that I like to think about.
But the workaround that fixed for me was to surround the code in which I create and actually present the UITabBarItems
on the main thread with a simple dispatch_async
dispatch_async(dispatch_get_main_queue(), {
//your code here
}
As I said, might not be the best solution, but in the end was the one that actually worked.
Hope that Apple will fix this soon.
Upvotes: 0
Reputation: 767
A problem I had was in a view controller setting a title with self.title = @"Title"
would cause the tabBarItem
title to change and cause the ugly bug in this question. I changed it to self.navigationItem.title = @"Title"
This seemed to fix the problem.
Upvotes: 0
Reputation: 1065
Move
self.title = @"SomeText";
from
- (void)awakeFromNib {}
to
- (void)viewDidLoad {}
Upvotes: -1
Reputation: 384
This answer will not solve your particular case but could help others with the same problem.
The problem seems to appear if you're using the UIViewControllers tabBarItem property to set the title. Using the UITabBarController tabBar property instead should resolve the problem.
So instead of (e.g.):
tabBarController.viewControllers[0].tabBarItem.title = @"SomeText";
use:
tabBarController.tabBar.items[0].title = @"SomeText";
Update
We found out that replacing the UITabBarItem is another workaround to this iOS 10 bug:
UITabBarItem *item = tabBarController.viewControllers[0].tabBarItem;
tabBarController.viewControllers[0].tabBarItem = [[UITabBarItem alloc] initWithTitle:@"SomeText" image:item.image tag:item.tag];
Upvotes: 6
Reputation: 1679
This happens anytime you programmatically set a tab's Title in iOS 10. I have confirmed that this is a bug in iOS 10 beta. I have opened a bug report and radar: openradar.appspot.com/27749026
I have also posted a Github repo that demonstrates the issue: https://github.com/RippleAdder/TabStacks
Upvotes: 6