ios - 将自定义视图添加到 NavigationBar 不起作用?
问题描述
我正在尝试将自定义视图添加到 NavigationBar 并且结果无法正常工作。
public let statusBarHeight: CGFloat = {
var heightToReturn: CGFloat = 0.0
for window in UIApplication.shared.windows {
if let height = window.windowScene?.statusBarManager?.statusBarFrame.height, height > heightToReturn {
heightToReturn = height
}
}
return heightToReturn
}()
override func viewDidLoad() {
super.viewDidLoad()
// self.navigationController?.navigationBar.isHidden = true
// Do any additional setup after loading the view.
let barView = UIView(frame: CGRect.zero)
barView.backgroundColor = .purple
barView.translatesAutoresizingMaskIntoConstraints = false
if let navBarSize = self.navigationController?.navigationBar.frame.size {
// barView.frame.size = CGSize(width: navBarSize.width, height: navBarSize.height + statusBarHeight)
self.navigationController?.navigationBar.subviews.first?.insertSubview(barView, at: 0)
NSLayoutConstraint.activate([
barView.leadingAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.leadingAnchor)!),
barView.trailingAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.trailingAnchor)!),
barView.heightAnchor.constraint(equalToConstant: navBarSize.height + statusBarHeight )
])
}
}
查看缺口设备的区别:
解决方案
我必须更改您的代码,现在它适用于所有设备,甚至 iPhone 12 mini,如图所示。 检查图像
override func viewDidLoad() {
super.viewDidLoad()
let barView = UIView(frame: CGRect.zero)
barView.backgroundColor = .purple
barView.translatesAutoresizingMaskIntoConstraints = false
if (self.navigationController?.navigationBar.frame.size) != nil {
self.navigationController?.navigationBar.subviews.first?.insertSubview(barView, at: 0)
NSLayoutConstraint.activate([
barView.leadingAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.leadingAnchor)!),
barView.trailingAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.trailingAnchor)!),
barView.topAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.topAnchor)!),
barView.bottomAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.bottomAnchor)!),
])
}
}
推荐阅读
- bootstrap-4 - 引导程序中“标签”和“输入”之间的间距
- flutter - 在 Flutter 中使用导入包的不同方法
- python - 如何组合多标签分类器的分数?
- scala - 类型不匹配。必需:布尔值,在 Scala 中找到:Future[Boolean]
- reactjs - 子类化反应原生组件不再起作用
- ios - 目前无法安装此应用程序 RCT-vibration
- interface - 具有最终方法而不是接口的抽象类
- java - 如何更新 JTable 以显示来自新模型的数据?
- node.js - 仅使用 vanilla node.js 将 multipart/form-data 与文件组合
- javascript - 如何使用 lodash 或 javascript 中的条件对 JSON 进行升序和降序排序