UIViewController - 在“活动”弹出窗口中设置导航栏文本的颜色

时间:2016-06-03 15:36:54

标签: ios objective-c uinavigationbar uiactivityviewcontroller

创建了iPhone和iPad都需要的UIActivityViewController,支持iOS 8和9。

应用程序导航栏为深色,文本显示为白色。

UIActivityViewController已经被子类化了,我在这里添加了一个tintColor:

myActivityViewController.modalPresentationStyle = UIModalPresentationPopover;
[self.viewcontrollertoPopFrom.navigationController presentViewController:myActivityViewController animated:YES completion:^{
    [[UINavigationBar appearance] setBarTintColor:[UIColor myDarkerColor]];
}];

目前也在UIActivityViewController子类的viewDidLoad中

这会导致条形图在所选活动(如电子邮件)中以我想要的方式显示。到目前为止一切都很好。

我唯一的问题是当用户选择用户可以选择的操作列表中的“更多”按钮时出现的“活动”弹出窗口。

enter image description here

我试过在我能想到的每一个组合中为系统和视图操纵UINavigationBar都无济于事。我最终得到了这个:

enter image description here

我错过了什么?

2 个答案:

答案 0 :(得分:0)

尝试[[UINavigationBar appearance] setTranslucent:NO]

默认情况下,此属性设置为YES,并且根据Apple的文档:

  

如果在半透明的导航栏上将此属性设置为NO   自定义背景图片,导航栏提供不透明   如果导航栏有黑色图像的背景   UIBarStyleBlack样式,如果导航栏有白色   UIBarStyleDefault,或导航栏的barTintColor(如果是自定义)   价值定义

因此,将半透明属性设置为NO并将barTintColor设置为自定义值应该可以解决问题。

<强>更新

看起来因为用户排序屏幕(“活动”)是由UIActivityViewController生成的,您将无法自定义其导航栏超出色调颜色,这似乎只影响UIBarButtonItems

  

UIActivityViewController仍然是一个只提供自定义的API   功能,但不是自定义UI。你无法改变它的外观。该   您可以更改的视觉样式的一部分是您的自定义图标   UIActivity子类。 (Source

我很遗憾地说,你要么必须坚持UIActivityViewController中的系统颜色,要么创建一个可自定义的自定义控件。一个快速的Cocoapods搜索显示,没有任何最近的第三方控件可以让你这样做,但我强烈建议你分享它,如果你决定!

更新2

尽管酒吧的色调颜色无法自定义,但this answer提供了一种解决方法,可通过设置应用程序窗口的色调来更改条形图navigationItem的颜色。

答案 1 :(得分:0)

为什么我开始看到白色文字,一位同事指出应用程序可能将appdelegate.window设置为白色。

所以现在在我分配UIActivityViewController之前,我将窗口设置为我想要的色调:

[[UIApplication sharedApplication].delegate.window setTintColor:[UIColor myColor]];

然后在UIActivityViewController中的completionWithItemsHandler中,我将它设置回原来的颜色。

虽然这不会将UINavigationBar设置为主题颜色,但它会将“完成”按钮设置为允许用户查看的按钮。