使自定义 viewcontroller 覆盖导航栏
Make the custom viewcontroller cover the navigation bar
我在我的主 viewcontroller 上显示自定义弹出窗口。为此,我在故事板中创建了一个 viewcontroller(如图所示),对应的 class 如下所示。
class PopUpViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
self.showAnimate()
}
func showAnimate()
{
self.view.alpha = 1.0
}
func removeAnimate()
{
UIView.animate(withDuration: 0.0, animations: {
self.view.alpha = 0.0;
}, completion:{(finished : Bool) in
if (finished) {
self.view.removeFromSuperview()
}
});
}
}
然后在我的主 viewcontroller 中,我在单击按钮时显示如下弹出窗口:
let popOverVC = UIStoryboard(name: "MainViewController", bundle: nil).instantiateViewController(withIdentifier: "popup") as! PopUpViewController
self.addChildViewController(popOverVC)
popOverVC.view.frame = self.view.bounds
self.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: self)
添加弹出窗口时,这会使主视图控制器的背景变黑,不透明度为 70%。如何让导航栏也有同样的背景效果?
我试过更新:
self.view.window?.backgroundColor = UIColor.black.withAlphaComponent(0.7)
和
self.navigationController?.navigationBar.backgroundColor = UIColor.black.withAlphaComponent(0.7)
在 viewDidLoad() 中,但没有工作。任何可能的解决方案?
如果我理解正确,您是将 popOverVC
作为子视图添加到嵌入 UINavitationController
的 mainViewController
的视图中。如果是这种情况,那么 popOverVC
不覆盖导航栏是合乎逻辑的,因为导航栏是 navigationController
的子视图,而不是 mainViewController
的子视图。为了能够覆盖导航栏,您必须将 popOverVC
添加到 navigationController
:
// to make things a bit easier working with the optional self.navigationController
guard let navController = self.navigationController else { return }
let popOverVC = UIStoryboard(name: "MainViewController", bundle: nil).instantiateViewController(withIdentifier: "popup") as! PopUpViewController
navController.addChildViewController(popOverVC)
popOverVC.view.frame = navController.view.bounds
navController.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: navController)
我在我的主 viewcontroller 上显示自定义弹出窗口。为此,我在故事板中创建了一个 viewcontroller(如图所示),对应的 class 如下所示。
class PopUpViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
self.showAnimate()
}
func showAnimate()
{
self.view.alpha = 1.0
}
func removeAnimate()
{
UIView.animate(withDuration: 0.0, animations: {
self.view.alpha = 0.0;
}, completion:{(finished : Bool) in
if (finished) {
self.view.removeFromSuperview()
}
});
}
}
然后在我的主 viewcontroller 中,我在单击按钮时显示如下弹出窗口:
let popOverVC = UIStoryboard(name: "MainViewController", bundle: nil).instantiateViewController(withIdentifier: "popup") as! PopUpViewController
self.addChildViewController(popOverVC)
popOverVC.view.frame = self.view.bounds
self.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: self)
添加弹出窗口时,这会使主视图控制器的背景变黑,不透明度为 70%。如何让导航栏也有同样的背景效果?
我试过更新:
self.view.window?.backgroundColor = UIColor.black.withAlphaComponent(0.7)
和
self.navigationController?.navigationBar.backgroundColor = UIColor.black.withAlphaComponent(0.7)
在 viewDidLoad() 中,但没有工作。任何可能的解决方案?
如果我理解正确,您是将 popOverVC
作为子视图添加到嵌入 UINavitationController
的 mainViewController
的视图中。如果是这种情况,那么 popOverVC
不覆盖导航栏是合乎逻辑的,因为导航栏是 navigationController
的子视图,而不是 mainViewController
的子视图。为了能够覆盖导航栏,您必须将 popOverVC
添加到 navigationController
:
// to make things a bit easier working with the optional self.navigationController
guard let navController = self.navigationController else { return }
let popOverVC = UIStoryboard(name: "MainViewController", bundle: nil).instantiateViewController(withIdentifier: "popup") as! PopUpViewController
navController.addChildViewController(popOverVC)
popOverVC.view.frame = navController.view.bounds
navController.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: navController)