ios - swift navigation bar




首先添加一個UIView,甚至導航欄 (9)

我想在任何其他視圖上方顯示導航欄,即一種類似如下所示的“彈出式”視圖:

  • 用0.5 alpha的全屏黑色背景來查看下面的其他UIViewController
  • 中間有一些信息的UIView窗口,(如果你想知道一切的話,就是一個日曆)。

為此,我創建了一個包含兩個UIViews (背景和窗口)的UIViewController,並試圖顯示它。 我嘗試了一個簡單的[mySuperVC addSubview:myPopUpVC.view] ,但我仍然有上面的導航欄。

我試圖將其作為模式呈現,但下面的UIViewController消失了,我失去了透明度效果。

任何想法做到這一點,我敢肯定這很簡單...

謝謝!


@Nicolas Bonnet的快速版回答:

    var popupWindow: UIWindow?

func showViewController(controller: UIViewController) {
    self.popupWindow = UIWindow(frame: UIScreen.mainScreen().bounds)
    controller.view.frame = self.popupWindow!.bounds
    self.popupWindow!.rootViewController = controller
    self.popupWindow!.makeKeyAndVisible()
}

func viewControllerDidRemove() {
    self.popupWindow?.removeFromSuperview()
    self.popupWindow = nil
}

不要忘記窗口必須是一個強大的屬性,因為原來的答案導致立即釋放窗口


Dalef在swift中的絕佳解決方案:

self.navigationController?.view.addSubview(view)

[self.navigationController.view addSubview:overlayView]; 是你真正想要的


注意如果你想在全屏中添加視圖,那麼只能使用下面的代碼

添加這些UIViewController的 擴展

public extension UIViewController {
   internal func makeViewAsFullScreen() {
      var viewFrame:CGRect = self.view.frame
      if viewFrame.origin.y > 0 || viewFrame.origin.x > 0 {
        self.view.frame = UIScreen.main.bounds
      }
   }
}

繼續正常的子視圖添加過程

現在用於添加UIViewController的viewDidAppear

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

     self.makeViewAsFullScreen()
}

將您的視圖添加為NavigationController的子視圖。

[self.navigationController.navigationBar addSubview: overlayView)]

您也可以將其添加到窗口中:

UIView *view = /* Your custom view */;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
[window addSubview:view];

希望這可以幫助.. :)


我建議你創建一個新的UIWindow:

UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
window.rootViewController = viewController;
window.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
window.opaque = NO;
window.windowLevel = UIWindowLevelCFShareCircle;
window.backgroundColor = [UIColor clearColor];

[window makeKeyAndVisible];

然後你可以在其他UIViewController中管理你的視圖。 要刪除窗口:

[window removeFromSuperview];
window = nil;

希望這會有所幫助!


有多種方法可以做到這一點:

1-在UIWindow上添加你的UIView ,而不是在UIViewController上添加它。 這樣它就會處於最佳狀態。

   [[(AppDelegate *)[UIApplication sharedApplication].delegate window] addSubview:view];

2-使用自定義轉換,使你的UIViewController在後面顯示0.5 alpha

為此,我建議你看看這個: https://github.com/Citrrus/BlurryModalSeguehttps://github.com/Citrrus/BlurryModalSegue


這是一個簡單優雅的解決方案,正在為我工作。 您可以將導航欄的z位置設置在視圖下方:

self.navigationController.navigationBar.layer.zPosition = -1;

請記住完成後將其設回0。


[self.navigationController.navigationBar.layer setZPosition:-0.1];
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10, 20, 35, 35)];
[view setBackgroundColor:[UIColor redColor]];
[self.navigationController.view addSubview:view];
[self.navigationController.view bringSubviewToFront:view];
self.navigationController.view.clipsToBounds = NO;
[self.navigationController.navigationBar.layer setZPosition:0.0];







popupwindow