2016-11-04 5 views
0

Ich verwende Swift 3 und xcode 8, um ein Slide-Out-Menü für eine iOS-App zu erstellen (ich möchte keine Open-Source-Bibliothek verwenden), also hatte ich es gebaut bin mit zwei Problemen konfrontiert, 1. Wenn die zentrale Ansicht eine Navigationsleiste hat, dann erscheint die seitliche Menüansicht unterhalb der Navigationsleiste, ich möchte, dass sie von den Bildschirmgrenzen aus beginnt.Slide Out Menü iOS zeigt Statusleiste in iOS

2.Die Folie Menüansicht zeigt auch die Träger, Zeit oben auf der Menüansicht, Ich möchte das Verhalten ähnlich wie Google plus iOS App, wo das Menü auf der Startseite geladen wird.

Nachstehend finden Sie den Code, mit dem ich das Dia-Menü öffne. Ich bin mir nicht sicher, ob die oben genannten Probleme auftreten, weil ich die Menüansicht als Unteransicht hinzugefügt habe. Wenn es einen besseren Weg gibt, bitte vorschlagen . Öffnen Sie das Menü Ansicht aus dem Home-View-Controller

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) 
+0

Warum hassen Sie o Stiftquellenbibliotheken? Sie machen die Welt schön. –

+0

Bitte fügen Sie welche Bibliothek Sie verwenden? – Vinodh

+0

@Vinodh Wie in der Frage erwähnt, verwende ich keine Bibliothek. Ich habe versucht, es zu implementieren, aber mit dem oben genannten Problem konfrontiert. –

Antwort

1

Wenn Sie wirklich sehen möchten oben auf der Statusleiste zu sein und die NavController Sie es zum Fenster hinzufügen:

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

Hinweis dass die Sicht ist nicht länger ein Subview des Viewcontroller, so dass Sie auch es müssen manuell in deinit entlassen sonst wird es auch auf dem Bildschirm bleiben, wenn die view-Controller gehen weg:

menuVC.view.removeFromSuperview() 
+0

Wie von @Girish M und Ihnen vorgeschlagen, das Hinzufügen des Menüs vc auf Anwendung keywindow löst das Problem 1, aber immer noch die Statusleiste in der Menüansicht zu sehen. Danke für die Lösung. –

+0

schalten Sie einfach die Statusleiste aus: https://www.hackingwithswift.com/example-code/uikit/how-to-hide-the-status-bar –

+0

Ich habe versucht, die Statusleiste im Menü vc durch ausblenden, override var prefersStatusBarHidden: Bool { true zurückgeben }, ich rufe auch setNeedsStatusBarAppearanceUpdate(), in viewWillAppear, immer noch die Statusleiste angezeigt wird, hat die Storyboard-Voreinstellung für diese VC auch Statusleiste Wert als "None". –

0
  1. Sie können das linke Menü als Unteransicht über das Anwendungsfenster hinzufügen und es mithilfe der Animation verschieben.

  2. Hide/die Statusleiste angezeigt, wenn Sie den Träger, die Zeit auf dem Menü Ansicht

+0

Ich habe versucht, die Statusleiste mit dem folgenden Code im Menü Ansicht Controller zu verstecken, immer noch die Statusleiste angezeigt wird, überschreiben var prefersStatusBarHidden: Bool { zurück True } –

+0

In plist, fügen Sie bitte folgende Schlüssel-Wert-Paar "View Controller- basic status bar appearance "-> NO – miOS

+0

Ich habe diese Einstellung versucht und nur in den View-Controllern muss ich die Statusleiste ausblenden, ich gebe nein zurück, trotzdem sehe ich die Statusleiste.Die Navigationsleiste für die Hauptansicht wurde über das Storyboard (das Standardnavigationsfenster) erstellt. Daher versuche ich, eine benutzerdefinierte Navigationsleiste zu erstellen, um festzustellen, ob das Problem behoben wurde. Danke –

-1

Klasse Viewcontroller zeigen, nicht wollen: 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) 

}