实际上两个问题合二为一,但一起发生,所以请耐心等待......
我的iPad(横向)应用程序以.PageSheet
样式呈现模态视图控制器,从其故事板ID以编程方式实例化。视图控制器是UINavigationController
嵌入显示我应用内容的实际自定义UIViewController
子类:
@IBAction func showDetails(sender:AnyObject)
{
guard let detailsNavigation = storyboard?.instantiateViewControllerWithIdentifier("DetailsNavigationControllerID") as? UINavigationController else {
// Failed to instantiate navigation controller (this should not
// happen); abort:
return
}
guard let detailsViewController = detailsNavigation.topViewController as? DetailsViewController else {
// Top view controller of navigation is not of the right type (this
// should not happen); abort:
return
}
// Configure content view controller:
detailsViewController.title = "MyTitle"
// etc...
// Present the containing navigation controller, modally, as page sheet:
detailsNavigation.modalPresentationStyle = UIModalPresentationStyle.PageSheet
presentViewController(detailsNavigation, animated: true, completion: nil)
}
此视图控制器又有UIButton
触发segue。 segue包括以模态方式呈现第三个视图控制器,但这次是全屏(具有转换"默认",即" Cover Vertical")。
我遇到两个问题:
在转换期间,呈现页面纸张视图控制器的圆角消失(即,变为完全正方形)。在提交和解雇期间都会发生这种情况。
呈现的全屏视图控制器(也是UINavigationController
)具有错误的状态栏样式,我似乎无法修复它。
此全屏模态导航控制器的导航栏在IB中定义为Style: Default
,Translucent: true
,Bar tint: Default
(即,清除颜色)。条形图几乎为白色,状态栏文本应为黑色(.Default
)。但是,它在应用程序的其余部分(整个都有一个蓝色导航栏)中保持白色(.LightContent
)。
我在所提供导航的顶视图控制器中尝试了以下内容:
override func viewDidAppear(animated: Bool)
{
super.viewDidAppear(animated)
self.navigationController?.setNeedsStatusBarAppearanceUpdate()
}
override func preferredStatusBarStyle() -> UIStatusBarStyle
{
return UIStatusBarStyle.Default
}
......无济于事。
(该应用在 Info.plist 上将UIViewControllerBasedStatusBarAppearance
设置为YES
,其他带有浅色导航栏的模态视图控制器具有状态栏样式适当地显示。)
更新1 :我已阅读this question及其部分答案,但仍无法使其发挥作用(尚未尝试进行子类化UINavigationController
),但现在我现在为什么preferredStatusBarStyle
没有在顶视图控制器上被调用。
更新2:我尝试以编程方式呈现相同的导航控制器,并直接从我的(已经是全屏)根视图控制器 - 而不是在页面内显示)。现在,状态栏正确显示黑色字符。也许我最好更改我的用户界面...