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