我有一个UINavigationController,我使用Interface Builder中导航栏的Tint属性将其更改为白色。但按钮和标题中的文本仍然是默认颜色,白色,因此在白色背景下丢失。任何人都知道如何解决这个问题?
答案 0 :(得分:31)
从iOS 5开始,使用UIBarButtonItem外观代理更容易:
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor],
UITextAttributeTextColor,
[UIColor clearColor],
UITextAttributeTextShadowColor, nil];
[[UIBarButtonItem appearance] setTitleTextAttributes: attributes
forState: UIControlStateNormal];
在应用程序中设置:didFinishLaunchingWithOptions:
答案 1 :(得分:11)
for (id subView in theNavigationBar.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
[(UIButton *)subView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[(UIButton *)subView setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal];
}
}
答案 2 :(得分:8)
这是一种方式:
[[theNavigationBar.subviews objectAtIndex:1] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[[theNavigationBar.subviews objectAtIndex:2] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
然而,巨大的,警告。这很可能会破坏未来的操作系统版本,不推荐使用。
至少你应该进行大量的测试,并确保你对导航栏的子视图布局的假设是正确的。
答案 3 :(得分:2)
或者您使用自己的按钮栏项子类与您指定的setter,lus不是iPhone OS 3假设为每个按钮公开文本颜色
答案 4 :(得分:2)
我做醉酒的建议。我在一些状态下使用后退按钮制作一系列图像,在几个状态下使用常规按钮,并将它们放在自定义UIButton子类中,设置适当的样式。
作为一种解决方案,它不能很好地扩展,但我的需求很简单。如果内置控件中的子视图顺序发生变化,它具有不破坏的优点,这是该方法的明显缺点。需要多张图片的缺点。另一个棘手的问题是处理方向更改,因为按钮应该改变大小。
在相关说明中,如果您确实更改了导航栏的色调颜色,则使用特殊的“更多”视图控制器无法很好地自定义选项卡栏的顺序。似乎没有任何“可接受的”方式来更改该视图中工具栏的颜色。
答案 5 :(得分:1)
你不能迭代UINavigationBar视图的内容来找到awakeFromNib中的按钮吗?
答案 6 :(得分:0)
这里使用干净的方式(依赖公共API)来执行此操作恕我直言:您应该使用titleView
的{{1}}属性将其应用于您自己的navigationItem
,您将在其中自定义UILabel
textColor
答案 7 :(得分:-1)
您可以通过在导航栏中添加标签来更改标题外观,如下所示。
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 35)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
label.textColor =[UIColor whiteColor];
label.text=self.title;
self.navigationItem.titleView = viewLabel;
[label release];