iOS如何实现status bar与navigation bar透明显示下层图片内容
iOS 纯代码实现Status Bar透明适配方案
Status Bar本身默认无背景色,你看到的不透明效果通常是布局延伸未开启、或者列表视图没有延伸到状态栏区域导致的,按以下步骤修改即可:
步骤1:补充ViewController布局配置
在viewDidLoad中追加以下代码:
// 允许视图内容延伸到所有系统栏区域(包含状态栏、导航栏) self.edgesForExtendedLayout = .all // 即使导航栏是不透明状态也允许内容延伸,兼容不同场景 self.extendedLayoutIncludesOpaqueBars = true
你已经配置了table.contentInsetAdjustmentBehavior = .never,和上述代码配合即可关闭系统自动的安全区内边距调整。
步骤2:确认TableView的顶部约束设置
因为没有使用Storyboard,你在代码中添加TableView约束时,必须将其顶部约束绑定到父视图的顶部,而非安全区顶部:
// 错误写法:会让table顶部从安全区(状态栏下方)开始 // tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true // 正确写法:让table顶部对齐整个屏幕的顶部,内容可以延伸到状态栏区域 tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true // 其余约束照常设置即可 tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
步骤3:(可选)自定义状态栏文字颜色
如果需要调整状态栏文字颜色适配图片背景,可以在当前ViewController中重写属性:
override var preferredStatusBarStyle: UIStatusBarStyle { // 深色背景用lightContent显示白色文字,浅色背景用.default显示黑色文字 return .lightContent }
如果当前ViewController包含在UINavigationController中,需要先自定义UINavigationController子类,添加以下代码让子控制器可以自行控制状态栏样式:
class CustomNavigationController: UINavigationController { override var childForStatusBarStyle: UIViewController? { return topViewController } }
初始化导航栏时使用这个自定义子类即可。
完成以上配置后,首个Cell的ImageView内容就会自然透到状态栏区域,实现状态栏和导航栏全透明的效果。
内容的提问来源于stack exchange,提问作者Vcubbz
相关产品推荐
相关产品推荐

