iOS 13中控制器呈现模态时的UINavigationBar高度

时间:2019-09-25 21:54:58

标签: ios uitableview modalviewcontroller ios13

控制器显示以下代码:

let vc = UIViewController()
vc.view.backgroundColor = Colors.green
let nvc = UINavigationController(rootViewController: vc)
self.present(nvc, animated: true, completion: nil)

它显示

original

但是导航栏的高度很大。应该是这样

shouldbe

如何像第二张图片一样显示导航栏的高度?

1 个答案:

答案 0 :(得分:0)

当堆栈不太深时,导航栏实际上是正确的大小(至少对于iOS 13标准而言)。对于在索引2(及以后的位置)显示的视图,导航栏会变小

要调整导航栏的大小,请执行以下两个步骤:

  1. 获取默认的高度限制(名称为"UI-View-Encapsulated-Layout-Height")。为此,请在导航栏的约束中搜索。我在下面无耻地复制了Isaih Turner's solution,这使它变得更容易。

    extension UIView {
        /// Returns the first constraint with the given identifier, if available.
        ///
        /// - Parameter identifier: The constraint identifier.
        func constraintWithIdentifier(_ identifier: String) -> NSLayoutConstraint? {
            return self.constraints.first { $0.identifier == identifier }
        }
    }
    
  2. 将常数设置为所需值。

    let existingConstraint = self.navigationController?.navigationBar.constraintWithIdentifier("UIView-Encapsulated-Layout-Height")
    existingConstraint?.constant = 88.0
    self.navigationController?.navigationBar.setNeedsLayout()
    

您完成了。