从iPad上的PageSheet模态视图控制器呈现全屏模态视图控制器

时间:2015-11-24 07:05:55

标签: ios ipad statusbar modalviewcontroller

实际上两个问题合二为一,但一起发生,所以请耐心等待......

我的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")。

我遇到两个问题:

  1. 在转换期间,呈现页面纸张视图控制器的圆角消失(即,变为完全正方形)。在提交和解雇期间都会发生这种情况。

  2. 呈现的全屏视图控制器(也是UINavigationController)具有错误的状态栏样式,我似乎无法修复它。

  3. 此全屏模态导航控制器的导航栏在IB中定义为Style: DefaultTranslucent: trueBar 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:我尝试以编程方式呈现相同的导航控制器,并直接从我的(已经是全屏)根视图控制器 - 而不是在页面内显示)。现在,状态栏正确显示黑色字符。也许我最好更改我的用户界面...

0 个答案:

没有答案