我的问题应该很简单,但我找不到解决方案。
我正在显示模态VC,我想附加昏暗的背景视图。
将模态VC作为子项添加到父VC。父VC位于导航控制器(topViewController
)
将昏暗视图添加到UIScreen.windows.first!
窗口。但昏暗的视图并没有填满整个屏幕。我为原点设置了CGPointZero
的框架,我尝试了负y值它没有帮助。它看起来像这样。
我还添加了一组自动布局约束,设置为false / true translatesAutoresizingMaskIntoConstraints
属性,更改为clipToBounds
。
没有任何帮助,昏暗的视图不会覆盖整个屏幕。
我可以全屏显示昏暗的视图,如果我不作为孩子添加模态VC,即我直接使用模态VC的视图,并将其添加到window
。它看起来很好,但还有另一个bug。这就是为什么我要添加模态VC,作为一个孩子VC。
如何强制昏暗的视图显示整个屏幕。
在应用程序中可能会同时显示几个模态VC,这就是为什么seques(即VC的呈现)不是最佳选择。
P.S。以下是错误的描述:
。如果将模态VC(UITableVC放入导航控制器)的视图直接添加到窗口,则视图在从BG返回后显示移位表,即在BG中并且开始从BG显示模态VC之后切换回Foreground,表格标题的一部分(问题显示部分)向上移动并且模态VC的导航栏被展开,即它们相交,表格的标题未完全显示。我无法解决这个问题。
答案 0 :(得分:0)
将您的视图置于导航控制器的视图下:
UIView *dimView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
dimView.backgroundColor = [UIColor colorWithWhite:.4f alpha:.5f];
[self.navigationController.view addSubview:dimView];
[self.navigationController.view bringSubviewToFront:dimView];
答案 1 :(得分:0)
迅速4更新
let dimView = UIView(frame: UIScreen.main.bounds)
dimView.backgroundColor = UIColor(white: 0.4, alpha: 0.5)
self.navigationController!.view.addSubview(dimView)
self.navigationController!.view.bringSubviewToFront(dimView)
答案 2 :(得分:0)
您可以添加视图并使其变暗,并将其作为子视图添加到 UINavigationController ,状态栏如下:
// Dim navigation bar
let navDimView = UIView(frame: (self.navigationController?.navigationBar.bounds)!)
navDimView.restorationIdentifier = "navDimView"
navDimView.backgroundColor = UIColor.black.withAlphaComponent(0.6)
self.navigationController?.navigationBar.addSubview(navDimView)
// Dim status bar
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
let wFrame = window?.windowScene?.statusBarManager?.statusBarFrame
let statusBarView = UIView(frame: wFrame!)
statusBarView.restorationIdentifier = "statusBarView"
statusBarView.backgroundColor = UIColor.black.withAlphaComponent(0.6)
window?.addSubview(statusBarView)
如果你想恢复它,你可以做如下:
// Revert navigation bar back to normal
for subview in self.navigationController!.navigationBar.subviews {
if subview.restorationIdentifier == "navDimView" {
subview.removeFromSuperview()
}
}
// Revert status bar back to normal
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
for subview in window!.subviews {
if subview.restorationIdentifier == "statusBarView" {
subview.removeFromSuperview()
}
}