大标题折叠时如何呈现不同的导航标题?
How to present different navigation title when large title collapse?
目前,我在 ViewController 的 viewdidLoad 中使用以下代码为导航栏启用了大标题:
navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "MMMM dd"
let result = formatter.string(from: date)
self.title = “This is a Test\n\(result)"
var count = 0
for item in(self.navigationController?.navigationBar.subviews)! {
for sub in item.subviews{
if sub is UILabel{
if count == 1 {
break;
}
let titleLab :UILabel = sub as! UILabel
titleLab.numberOfLines = 0
titleLab.text = self.title
titleLab.lineBreakMode = .byWordWrapping
count = count + 1
}
}
}
self.navigationController?.navigationBar.layoutSubviews()
self.navigationController?.navigationBar.layoutIfNeeded()
当导航栏在"normal state"不再大的情况下折叠时,如何呈现完全不同的标题?
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let heightForCollapsedNav = UINavigationController().navigationBar.frame.size.height
let navHeight = navigationController!.navigationBar.frame.size.height
navigationController?.navigationBar.topItem?.title = navHeight <= heightForCollapsedNav ? "Collapsed" : "Large"
}
您可以 observe
navigationBar
的 bounds
并使用检查 [=] 更改 title
navigationBar
.
的 15=]
1. for Small Title, height
of navigationBar
= 44
2. for Large Title, height
of navigationBar
> 44
class VC: UIViewController {
var observer: NSKeyValueObservation?
override func viewDidLoad() {
super.viewDidLoad()
self.observer = self.navigationController?.navigationBar.observe(\.bounds, options: [.new], changeHandler: { (navigationBar, changes) in
if let height = changes.newValue?.height {
if height > 44.0 {
//Large Title
self.title = "Large Title"
} else {
//Small Title
self.title = "Small Title"
}
}
})
}
}
目前,我在 ViewController 的 viewdidLoad 中使用以下代码为导航栏启用了大标题:
navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "MMMM dd"
let result = formatter.string(from: date)
self.title = “This is a Test\n\(result)"
var count = 0
for item in(self.navigationController?.navigationBar.subviews)! {
for sub in item.subviews{
if sub is UILabel{
if count == 1 {
break;
}
let titleLab :UILabel = sub as! UILabel
titleLab.numberOfLines = 0
titleLab.text = self.title
titleLab.lineBreakMode = .byWordWrapping
count = count + 1
}
}
}
self.navigationController?.navigationBar.layoutSubviews()
self.navigationController?.navigationBar.layoutIfNeeded()
当导航栏在"normal state"不再大的情况下折叠时,如何呈现完全不同的标题?
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let heightForCollapsedNav = UINavigationController().navigationBar.frame.size.height
let navHeight = navigationController!.navigationBar.frame.size.height
navigationController?.navigationBar.topItem?.title = navHeight <= heightForCollapsedNav ? "Collapsed" : "Large"
}
您可以 observe
navigationBar
的 bounds
并使用检查 [=] 更改 title
navigationBar
.
1. for Small Title, height
of navigationBar
= 44
2. for Large Title, height
of navigationBar
> 44
class VC: UIViewController {
var observer: NSKeyValueObservation?
override func viewDidLoad() {
super.viewDidLoad()
self.observer = self.navigationController?.navigationBar.observe(\.bounds, options: [.new], changeHandler: { (navigationBar, changes) in
if let height = changes.newValue?.height {
if height > 44.0 {
//Large Title
self.title = "Large Title"
} else {
//Small Title
self.title = "Small Title"
}
}
})
}
}