iOS 4上的UIToolbar色调

13

我刚刚将我的iPhone 3GS升级到了iOS 4,但我的一些应用程序坏掉了。

其中一个问题是我有一个UIToolbar,里面有一些被着色成粉红色的按钮,在3.1.3操作系统上工作良好。 升级到iOS 4后,工具栏仍然被着色,但其中包含的按钮不再受该颜色影响,工具栏是粉红色的,而按钮则是普通蓝色。

我在网上搜索它,但没有找到相关的参考资料。

有人知道这个问题是什么吗?

2个回答

23

(必须坦白地说,我在发布之前就知道答案了,只是不知道如何将这些数据加载到StackOverflow。我认为我找到的解决方案对他人很有价值,所以想在这里发布。我是新手,请不要严厉批评 :))

所以最终问题的原因是,据我所知,操作系统行为的改变导致了问题。

就像所述的那样,在升级之前,色调代码是可用的,写成了这样:

// Toolbar content               
NSArray *items=[NSArray arrayWithObjects: ... ]; // PSEUDO CODE HERE
[toolbar setItems:items]; 

// Add tint
toolbar.tintColor = [UIColor colorWithRed:0.83 green:0.43 blue:0.57 alpha:0.5];

我需要做的是只需颠倒事物的顺序:

// Add tint
toolbar.tintColor = [UIColor colorWithRed:0.83 green:0.43 blue:0.57 alpha:0.5];

// Toolbar content               
NSArray *items=[NSArray arrayWithObjects: ... ]; // PSEUDO CODE HERE
[toolbar setItems:items]; 

(如果您在Interface Builder中创建了UIToolbar,则可以在那里更改其色调,这也适用于按钮)。

我猜在iOS 4之前,色调会更新所有按钮,而在iOS 4中它不会这样做,当添加按钮时,它们会检查现有的色调。但这只是一个猜测。无论如何,解决方案确实有效。

希望这能帮助某些人,并且我没有违反任何神圣的SO规则......

干杯!


10

看起来更像是一个操作系统的 bug 而非功能,因为当你设置 tintColor 时,导航栏会改变它们的项目颜色。

我们发现,如果您更改该项的样式,它会作为副作用刷新其颜色。在我们的情况下,原始按钮是带边框的,所以我们将它们更改为 plain 并将它们设置为带边框的。你可以编写一个更复杂和通用的代码,保存当前样式,设置另一个样式,然后切换回来。我只是懒得那么做。 :D 无论如何,你懂了吧。

toolbar.tintColor = //<some dynamically obtained UIColor>

// Workaround to properly set the UIBarButtonItem's tint color in iOS 4
for (UIBarButtonItem * item in toolbar.items)
{
    item.style = UIBarButtonItemStylePlain;
    item.style = UIBarButtonItemStyleBordered;
}

敬礼, Rula。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接