奇怪的 UINavigationBar 行为?
Posted
技术标签:
【中文标题】奇怪的 UINavigationBar 行为?【英文标题】:Strange UINavigationBar behavior? 【发布时间】:2013-11-20 15:29:48 【问题描述】:在我的应用程序中,我有一个窗口 tintColor 将所有内容设置为红色。用户按下根视图控制器上的条形按钮项(红色项),它会呈现一个带有导航栏(红色导航项)的 UIModalPresentationSheet。在那个导航项上按下一个按钮,它会拉出一个完整的模态视图,现在这个模态视图也有一个导航栏,但所有的导航项都是灰色的;它们是可用的,并且仍然运行正确的功能,但它们的颜色是灰色的。知道为什么吗?起初我尝试使用灰色按钮以编程方式执行此操作,然后我通过情节提要完成并直接在场景中为导航项目着色,它们看起来是红色的,但在启动时,它们在模态视图上是灰色的。谁能告诉我为什么??
以下是模态视图的呈现方式:
- (void)barButtonItemPressedOnUIModalPresentationSheet
asdfVC *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"showAsdf"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self presentViewController:navigationController animated:YES completion:nil];
奇怪的是,我在正确的 VC 类中设置了导航色调、按钮色调,甚至视图色调,但它似乎完全忽略了它。可能是因为我在其上设置了一个导航栏之前呈现它?
【问题讨论】:
【参考方案1】:您可以尝试使用appearance
属性为整个应用程序设置颜色。
在 AppDelegate 中设置它,UI 将在所有视图上看起来都一样。
要将tintColor
设置为红色,请使用:
[[UINavigationBar appearance]setTintColor:[UIColor redColor];
和
[[UIBarButtonItem appearance]setTintColor:[UIColor redColor];
您还可以查看以下代码以获得更多自定义:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]setTintColor:[UIColor redColor]];
【讨论】:
【参考方案2】:您可以在 AppDelegate.h 类中创建 UINavigationController 的属性。
@property (strong, nonatomic) UINavigationController *navigationController;
在您的 AppDelegate.m 类中,在 didFinishLaunchingWithOptions 方法中编写以下代码
self.navigationController=[[UINavigationController alloc]initWithRootViewController:self.UIModalPresentationSheet];
self.window.rootViewController = self.navigationController;
现在在 UIModalPresentationSheet 类的 ViewDidLoad 方法中编写此代码
-(void)viewDidLoad
[super viewDidLoad];
self.navigationController.navigationBar.tintColor = [UIColor redColor];
希望它会奏效。
【讨论】:
我的应用委托中没有 UIModalPresentationSheet,因此它给了我一个错误“在 appdelegate 类型的对象上找不到属性 UIModalPresentationSheet。” 你的 UIModalPresentationSheet 是 ViewController 类型?请解释【参考方案3】:您能否尝试在视图控制器和显示绿色的导航栏上设置色调颜色:
viewController.view.tintColor = [UIColor redColor];
viewController.navigationController.navigationBar.tintColor = [UIColor redColor];
【讨论】:
这很奇怪!!!我的课上确实有这个,但按钮是灰色的!!!!难道是我在实际呈现视图控制器之前设置了导航栏?【参考方案4】:我在我的应用程序中遇到了完全相同的异常情况,并且尝试了您尝试过的所有方法。我已经在 viewWillAppear 和 viewDidAppear 中放置了使颜色为蓝色(在我的情况下)的代码,但似乎没有任何东西可以解决它。我的猜测是这是一个 ios 错误。
【讨论】:
非常不幸。我已经向苹果提交了错误报告,希望它尽快得到修复!【参考方案5】:发生这种情况是因为 Apple 假设我们不会呈现超过 1 个视图控制器,并将背景和所有条形按钮项(不知道为什么)调暗作为默认行为以将焦点放在最前面的视图上。
要解决此问题,您只需在 DidFinishLaunchingWithOptions 中将应用程序窗口上的 tintAdjustmentMode 强制设置为 Normal。
self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
【讨论】:
以上是关于奇怪的 UINavigationBar 行为?的主要内容,如果未能解决你的问题,请参考以下文章