13

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

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

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

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

4

2 回答 2

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

干杯!

于 2010-06-30T17:06:36.257 回答
10

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

我们发现,如果您更改项目的样式,它会刷新它们的颜色作为副作用。在我们的案例中执行以下操作。原来的按钮是有边框的,所以我们把它们改成普通的,然后再把它们设置成有边框的。您可以编写更复杂和通用的代码来保存当前样式,设置另一种样式,然后切换回来。我只是懒得这样做。: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;
}

问候,鲁拉。

于 2010-07-02T15:14:21.257 回答