【问题标题】:Slide Out menu iOS showing Status Bar in iOS滑出菜单 iOS 在 iOS 中显示状态栏
【发布时间】:2016-11-04 00:30:28
【问题描述】:

我正在使用 Swift 3 和 xcode 8 为 iOS 应用程序构建滑出式菜单(我不想使用任何开源库)所以我已经构建了它,我面临两个问题, 1.如果中心视图有导航栏,那么侧边菜单视图出现在导航栏下方,我希望它从屏幕边界开始。

2.滑动菜单视图还在菜单视图顶部显示载体、时间,我想要类似于 google plus iOS 应用程序的行为,其中菜单加载在主视图顶部。

请在下面找到我用来打开幻灯片菜单的代码,我不确定是否发生上述问题,因为我已将菜单视图添加为子视图,如果有更好的方法,请建议。 从主视图控制器打开菜单视图

let menuVC : MenuViewController = self.storyboard!.instantiateViewController(withIdentifier: "MenuViewController") as! MenuViewController
        menuVC.delegate = self
        self.view.addSubview(menuVC.view)
        self.addChildViewController(menuVC)
        menuVC.didMove(toParentViewController: self)
        menuVC.view.layoutIfNeeded()

        menuVC.view.frame=CGRect(x: 0 - UIScreen.main.bounds.size.width, y: 0, width: self.view.frame.width, height: self.view.frame.height);


        UIView.animate(withDuration: 0.3, animations: { () -> Void in
            menuVC.view.frame = self.view.frame
            sender.isEnabled = true
            }, completion:nil)

【问题讨论】:

  • 你为什么讨厌开源库?他们让世界变得美丽。
  • 请添加您正在使用的库?
  • @Vinodh 如问题中所述,我没有使用任何库。我尝试实现它但面临上述问题。

标签: ios swift3


【解决方案1】:

如果你真的想查看在状态栏和导航控制器的顶部,你可以将它添加到窗口中:

UIApplication.shared.keyWindow?.addSubview(menuVC.view)

请注意,视图不再是 ViewController 的子视图,因此您还需要在 deinit 中手动关闭它,否则即使视图控制器消失,它也会留在屏幕上:

menuVC.view.removeFromSuperview()

【讨论】:

  • 正如@Girish M 和你所建议的那样,在应用程序keywindow 上添加菜​​单vc 解决了问题1,但仍然在菜单视图上看到状态栏。感谢您的解决方案。
  • 我确实尝试通过隐藏菜单 vc 中的状态栏,覆盖 var prefersStatusBarHidden: Bool { return true } ,我还调用 setNeedsStatusBarAppearanceUpdate() ,在 viewWillAppear 内,仍然显示状态栏,此 VC 的故事板首选项的状态栏值也为“无”。
【解决方案2】:
  1. 您可以将左侧菜单添加为应用程序窗口的子视图并使用动画滑动它。

  2. 如果您不想在菜单视图顶部显示运营商、时间,则隐藏/显示状态栏

【讨论】:

  • 我尝试在菜单视图控制器中使用以下代码隐藏状态栏,仍然显示状态栏,覆盖 var prefersStatusBarHidden: Bool { return true }
  • 在plist中,请添加以下键值对“查看基于控制器的状态栏外观”->否
  • 我确实尝试过这个设置,只有在视图控制器中我必须隐藏状态栏,我返回不,仍然看到状态栏。主视图的导航栏是通过情节提要创建的(默认导航),所以我正在尝试创建一个自定义导航栏,看看它是否解决了这个问题。谢谢
【解决方案3】:

类视图控制器:UIViewController {

@IBOutlet weak var leading: NSLayoutConstraint!

@IBOutlet weak var sideview: UIView!

var showmenu = false

override func viewDidLoad() {
    super.viewDidLoad()


       leading.constant = -160

// sideview.layer.shadowOpacity = 5 // sideview.layer.shadowRadius = 5

}


@IBAction func btnmenu(_ sender: UIBarButtonItem) {



    if (showmenu)
    {

        leading.constant = -160

    }
    else
    {

        leading.constant = 0



       UIView.animate(withDuration: 0.5, animations:{self.view.layoutIfNeeded() })




    }
    showmenu = !showmenu





}


@IBAction func btntblview(_ sender: UIButton) {

    let hk = storyboard?.instantiateViewController(withIdentifier: "TableViewController")as! TableViewController

    self.navigationController?.pushViewController(hk, animated: true)

}

【讨论】:

    猜你喜欢
    • 2013-10-03
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2013-12-08
    • 1970-01-01
    相关资源
    最近更新 更多