【问题标题】:Issue with top margin of title in uinavigationbar iosuinavigationbar ios中标题的上边距问题
【发布时间】:2021-11-08 13:11:33
【问题描述】:

我尝试以编程方式在我的 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)

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

附言

我是 ios 开发的新手,所以我会犯很多愚蠢的错误。

【问题讨论】:

  • 不要手动添加导航栏,只需使用您的控制器作为根创建一个UINavigationController 并显示那个(并设置标题 - 可以通过 title 的属性自动设置)顺便说一句,你的控制器 - 当然还有关闭按钮)。

标签: ios uinavigationbar uinavigationitem


【解决方案1】:

我想我设法复制了您的观点。想参考代码可以找here。好的,我认为,即使您将导航栏设置为自定义高度,内容仍将保留在浅绿色区域内,即内容的空间(44pt 高)。

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

因此,为了确保您的导航栏远离安全区域,请在 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 方法被调用时,视图/布局还没有被放置。这将导致导航栏被移动到安全区域下方..

重要

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

有用的链接

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

【讨论】:

  • 好的,非常感谢,您帮助我理解了我的问题。
猜你喜欢
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 2014-11-09
  • 2012-02-09
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多