iOS 4上的UIToolbar色调

时间:2010-06-30 16:58:55

标签: iphone ios4 uitoolbar tint tintcolor

刚刚在我的iPhone 3GS上切换到iOS 4,我的一些应用程序崩溃了。

我遇到的一个问题是我有一个带有一些按钮的UIToolbar,有点粉红色,在3.1.3操作系统上运行良好。升级到iOS 4后,工具栏仍然有色,但它包含的按钮不再受色调的影响。工具栏是粉红色的,而按钮是常规蓝色。

在网上寻找它,但没有找到这样的东西。

有谁知道这个过程中发生了什么?

2 个答案:

答案 0 :(得分:23)

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

因此最终问题是由于AFAICT导致操作系统中的行为发生变化。

如上所述,色调代码在升级之前有效,并且写成如下:

// 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规则......

干杯!

答案 1 :(得分:10)

嗯,它似乎更像是一个操作系统错误,而不是一个功能,因为导航栏在设置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。