Swift 4:如何设置UIView背景覆盖含导航栏的整个屏幕?
如何让背景视图覆盖整个手机屏幕(包括导航栏)?
嘿,我来帮你搞定这个问题!要让背景铺满整个屏幕甚至延伸到导航栏下方,光靠布局约束还不够,得配合系统的导航栏设置一起调整,我给你一步步拆解:
1. 让视图控制器的内容延伸到导航栏下方
首先,在你的视图控制器的viewDidLoad方法里添加这两行代码,开启视图延伸并设置导航栏为透明:
navigationController?.navigationBar.isTranslucent = true edgesForExtendedLayout = .all
isTranslucent = true:让导航栏变成半透明(完全透明后续还可以调整),这样你的背景视图就能透过导航栏显示出来edgesForExtendedLayout = .all:告诉系统你的主视图可以延伸到屏幕的所有边缘,包括导航栏、状态栏和底部安全区域的下方
2. 修正背景视图的布局约束
你当前的代码里用了view.frame.width和view.frame.height,这在Auto Layout环境下是不太可靠的(frame会随着设备旋转、屏幕尺寸变化而改变),直接用约束绑定到视图的四个边缘就够了:
// 如果你用的是自定义的anchor方法 transparentBackGroundView.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, padding: .zero) // 或者用系统原生的Auto Layout写法 transparentBackGroundView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ transparentBackGroundView.topAnchor.constraint(equalTo: view.topAnchor), transparentBackGroundView.leadingAnchor.constraint(equalTo: view.leadingAnchor), transparentBackGroundView.trailingAnchor.constraint(equalTo: view.trailingAnchor), transparentBackGroundView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ])
另外别忘了把背景视图放到所有视图的最底层,避免被其他控件挡住:
view.sendSubviewToBack(transparentBackGroundView)
3. 完全隐藏导航栏的背景和阴影(可选)
如果想要导航栏完全透明,看不到原本的背景和阴影线,可以再加这两行:
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage()
把这些步骤结合起来,你的背景视图就能完美覆盖整个屏幕,包括导航栏所在的区域啦!
内容的提问来源于stack exchange,提问作者Box House
相关产品推荐
相关产品推荐

