CNContactViewController隐藏导航栏

时间:2016-11-15 01:23:05

标签: ios objective-c ios10 cncontactviewcontroller

当我将CNContactViewController推送到UITableViewController的{​​{1}}子类的堆栈时,顶部导航栏几乎完全隐藏。但是随着亮度一直向上,你会看到后面的箭头,然后是“细节”和系统状态栏。当我点击屏幕的那个角落时,CNContactViewController确实被解雇了。

enter image description here

当然这不好,因为用户可能甚至看不到导航栏的文本,现在按任何按钮都会被解雇。

有没有办法让CNContactViewController的导航栏色调与显示它的视图控制器(我应用程序的其余部分)相同?

UINavigationController

我应该注意到我只是在iOS 10上遇到这个问题,而不是10以下的版本。当我点击“添加到现有联系人”时,我也会得到正确着色的导航栏,但是当该视图时它再次中断控制器被解雇。

enter image description here

所以再一次,我的问题是:有没有办法让CNContactViewController的导航栏色调与显示它的视图控制器(我的应用程序的其余部分)相同?

2 个答案:

答案 0 :(得分:2)

您的第二个屏幕截图显示了此问题的原因:您已将条形(或一般条形按钮项目)的色调颜色设置为白色。因此,它们在透明导航栏前面是白色的,在联系人视图控制器中是白色背景。

您无法直接对 bar 色彩颜色做任何事情,但您可以通过以下两种方式解决此问题:

  • 一个是让你的导航栏不透明。在这种情况下,联系人视图控制器的导航栏将为黑色,并且您的白色条形按钮项目将可见。

  • 另一种方法是在联系人视图控制器推送时更改导航栏的色调颜色(不是条纹色调,而是它向下传递到其条形按钮项目的色调颜色),并在其更改时将其更改回来弹出。

编辑好的,我看到还有一个问题,因为New Contact视图控制器是在你面前呈现的另一个视图控制器。如果您拒绝放弃白条按钮项目设置,则必须使用外观代理将UIBarButtonItem色调设置为推送联系人视图控制器时的其他颜色,然后在导航控制器时将其重置为白色delegate告诉您用户正在弹回您的视图控制器。

答案 1 :(得分:1)

我花了好几个小时与CNContactViewController搏斗,试图强制它适合我的UINavigation外观设置,但它只是赢了。它有自己的外观和感觉。我看了一下iOS应用程序,比如Mail和Notes,看看它们是如何显示CNContactViewController的,它似乎显示为一个popover,所以我也是这样。

即使这不是微不足道的。 CNContactViewController必须包装在UINavigationView中,以便Create New Contact和其他视图可以推送。如果您已覆盖UINavigationBar外观默认值,则需要在之前和之后将它们设置回标准。以下是它的最终结果:

template <typename T> 
void foo(T&& x)
{
    foo(std::forward<T>(x), typename std::is_lvalue_reference<T>::type{});
}
template <typename T>
void foo(T &&value, std::true_type)
{
   // do something on lvalue
}
template <typename T>
void foo(T &&value, std::false_type)
{
   // do something on rvalue
}