iOS 10 UITabBar更多项目设置标题后可见

我的应用程序中有一个标签栏,标签栏项目是UITabBarItem的子类。 从服务器获取更新后,这些标签栏项目使用以下代码从代码中设置其标题:

[self setTitle:@"SomeText"]; 

一旦这一行运行,之前隐藏的选项卡栏项(在更多选项卡后面)将在主选项卡区域中可见,并堆叠在其他选项卡顶部。 请参阅下面的截图。 这只发生在iOS 10(testing版)中。 这是我的代码中的错误还是iOS 10中的问题?

我已经创build了一个最小的XCode项目,并发布到Github来演示这个问题: https : //github.com/RippleAdder/TabStacks

在这里输入图像说明

这个答案不会解决你的具体情况,但可以帮助其他同样的问题。

如果您使用UIViewControllers tabBarItem属性设置标题,似乎出现问题。 使用UITabBarController tabBar属性,而应该解决这个问题。

所以,而不是(例如):

 tabBarController.viewControllers[0].tabBarItem.title = @"SomeText"; 

使用:

 tabBarController.tabBar.items[0].title = @"SomeText"; 

更新

我们发现replaceUITabBarItem是这个iOS 10的另一个解决方法:

 UITabBarItem *item = tabBarController.viewControllers[0].tabBarItem; tabBarController.viewControllers[0].tabBarItem = [[UITabBarItem alloc] initWithTitle:@"SomeText" image:item.image tag:item.tag]; 

这发生在任何时候你编程设置标签的iOS 10中的标题。我已经确认,这是iOS 10testing版中的一个错误。 我已经打开了一个错误报告和雷达:openradar.appspot.com/27749026

我也发布了一个Github的回购协议,用来演示这个问题: https : //github.com/RippleAdder/TabStacks

我有一个问题是在视图控制器设置标题self.title = @"Title"将导致tabBarItem标题改变,并导致在这个问题的丑陋的错误。 我将其更改为self.navigationItem.title = @"Title"这似乎解决了这个问题。

我花了更多的时间在这个我想要考虑的事情上。

但是对于我来说固定的解决方法是围绕我创build的代码,并在主线程上实际呈现UITabBarItems ,并使用简单的dispatch_async

 dispatch_async(dispatch_get_main_queue(), { //your code here } 

正如我所说,可能不是最好的解决scheme,但最终是实际工作的那个。

希望苹果能尽快解决这个问题。

移动

self.title = @"SomeText";

- (void)awakeFromNib {}

 - (void)viewDidLoad {}