[英]Align UINavigationBar title with button on the right like iOS13 Messages app
情況1:僅右圖標
如果只需要設置兩個右側的barButton圖標,請在viewDidLoad下面調用該方法。
說明:創建兩個navBar按鈕項目,然后使用固定的墊片將其分開,然后根據設計規范選擇間距,並根據Apple HIG正確設置圖標的圖像名稱(我發現22 x 22px〜25 x 25px是一個很好的自定義范圍,但是您可以根據設計規格進行更改。
private func setUpRightNavBarIcons() {
let editBarButtonItem = UIBarButtonItem(image: UIImage(named: "yourEditIconImageName")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(editButtonItemTapped))
let moreBarButtonItem = UIBarButtonItem(image: UIImage(named: "yourMoreIconImageName")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(moreBarButtonItemTapped))
let fixedSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: self, action: nil)
fixedSpacer.width = 22
self.navigationItem.rightBarButtonItems = [fixedSpacer,editBarButtonItem, moreBarButtonItem]
}
@objc private func moreBarButtonItemTapped() {
print("moreBarButtonItemTapped")
// TODO: - Add your logic
}
@objc private func editButtonItemTapped() {
print("editButtonItemTapped")
// TODO: - Add your logic
}
案例2:左標題/大標題
您可以使用兩種方法來進行對齊。
private func setLeftAlignedNavBarTitle() {
let label = UILabel()
label.sizeToFit()
let titleAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 25, weight: .bold), NSAttributedString.Key.foregroundColor: UIColor.black]
label.attributedText = NSAttributedString(string: "Message", attributes: titleAttributes)
/// Make this label as leftBar Button
let leftButtonView = UIBarButtonItem(customView: label)
navigationItem.leftBarButtonItem = leftButtonView
}
2.另一種選擇是允許在viewDidLoad上顯示大標題並免費獲得它,如下所示:-
navigationController?.navigationBar.prefersLargeTitles = true
注意:-如果需要在右側,請使用第一種方法並將其設置為rightBarButtonItem。
也許有更正確和最優的解決方案,但它適合我。 不要被語法嚇到,我用的是SnapKit
lazy private var settingsButton = UIButton().then {
$0.setImage(Image.settings, for: .normal)
}
viewDidAppear(_ animated: Bool)
navigationController?.navigationBar.subviews.forEach { subview in
let stringFromClass = NSStringFromClass(subview.classForCoder)
guard stringFromClass.contains("UINavigationBarLargeTitleView") else { return }
subview.subviews.forEach { label in
guard label is UILabel else { return }
subview.addSubview(settingsButton)
settingsButton.snp.makeConstraints{
$0.top.equalTo(label)
$0.right.equalToSuperview().offset(-14)
$0.height.width.equalTo(35)
}
}
}
UIScrollViewDelegate
並在scrollViewDidScroll
方法中獲得navigationBar
scrollViewDidScroll
狀態,然后隱藏/顯示UIBarButtonItem
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.