我有一个 UIViewController 作为 UINavigationController 的根,我设置了大标题的首选项,如下所示navigationController?.navigationBar.prefersLargeTitles = true
我的目标是将视图的左侧与导航标题的左侧对齐,但我想动态而不是通过硬编码值来实现。这是所需的最终结果:
我尝试使用检索导航栏标题的左侧或 x 位置
let navigationLeftX = navigationController!.navigationBar.layoutMargins.left
我还打印了这个值并得到了值8.0
所以我想,我应该把它设置为创建的视图的 x 位置,它应该对齐,我的代码在viewWillAppear
:
// Create a demo view
let demoView = UIView()
view.addSubview(demoView)
demoView.backgroundColor = .orange
// Get the current left margin of the nav title
let navigationLeftX = navigationController!.navigationBar.layoutMargins.left
// Add constraints to your view
demoView.translatesAutoresizingMaskIntoConstraints = false
demoView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: navigationLeftX).isActive = true
demoView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
demoView.widthAnchor.constraint(equalToConstant: 100).isActive = true
demoView.heightAnchor.constraint(equalToConstant: 100).isActive = true
结果很接近,但仍然很差。
如果我将边距 x 值加倍,它似乎正确对齐
// Get the current left margin of the nav title
let navigationLeftX = navigationController!.navigationBar.layoutMargins.left * 2
所以我正要得出结论,除了 8 点的左边距之外,还有一个额外的 8 点填充,逻辑上认为,如果我将导航的左边距设置为 0,我应该会看到 8 点的填充,所以我做了:
navigationController!.navigationBar.layoutMargins.left = 0
但令我惊讶的是,它实际上位于屏幕的左边缘,没有任何填充:
任何人都可以解释这种行为并分享动态对齐视图与导航栏标题的最佳方式吗?
提前致谢