uinavigationbar 中标题的上边距问题 ios

Issue with top margin of title in uinavigationbar ios

我尝试以编程方式在我的 viewController 中添加 UINavigationBar,但是我遇到了标记问题,这使得我的导航栏标题移动到安全区域的顶部边框,我想知道如何将这个标题移动到导航栏的中心。我找不到它的任何边距、填充或框架配置。所以我的问题是如何将 UINavigationBar

的内容垂直居中

这是创建导航栏的代码:

  private lazy var navItem: UINavigationItem = {
        let item = UINavigationItem(title: R.string.localization.supportNavigationBarTittle())
        return item
  }()

  private lazy var navBar: UINavigationBar = {
        let bar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 60))
        bar.setTitleVerticalPositionAdjustment(CGFloat(70), for: UIBarMetrics.default)

        return bar
  }()

viewDidLoad 方法中,我将工具栏附加到整个视图

navBar.tintColor = .white
view.addSubview(navBar)
        
let doneItem = UIBarButtonItem(image: UIImage(named: R.image.crossIcon.name), style: .plain, target: self, action: #selector(selectorName(_:)))
doneItem.imageInsets = UIEdgeInsets.init(top: 16, left: 8, bottom: 20, right: 8);
navItem.leftBarButtonItem = doneItem
navBar.setItems([navItem], animated: false)

不幸的是,我得到了这个零上边距标题,我什至找不到解决它的方法。

P.S.

我在 ios 开发方面还很新,所以我会犯很多愚蠢的错误。

我想我成功复制了您的观点。如果你想参考代码,你可以找到它here。好的,我想,即使您将导航栏设置为您的自定义高度,内容仍将保持在浅绿色区域内,即内容的 space(44pt 高)。

除此之外,您将导航栏的 x & y 位置设置为 0(即,您将导航栏向右和顶部对齐)。在 iOS(或 Android)中,您有一个 SafeArea,在您的例子中是下图中带有红色边框的 space。

因此,为了确保您的导航栏远离安全区域,请在 viewDidLayoutSubviews() 方法中设置导航栏的框架。看下面代码

    private lazy var navBar: UINavigationBar = {
        let bar = UINavigationBar()
        return bar
    }()
    .
    .
    .
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        navBar.frame = CGRect(x: 0, y: view.safeAreaInsets.top, width: view.frame.size.width, height: 60) // Setting the frame 
    }

之所以将它添加到viewDidLayoutSubviews方法中是因为在调用viewDidLoad方法时还没有放置views/layout。这将导致导航栏被移动到安全区域下方..

重要

尽管如此,我还是建议您使用 UINavigationController,它默认具有 title 属性,可以很容易地更改。

有用的链接

如果您想了解如何增加 UINavbar 的大小,请阅读 this 线程