Проблема с большим заголовком панели навигации iOS 13
Я пытаюсь показать большой Title
в Navigation bar
, но с чистым фоном. При прокрутке вверх это будетNavigation bar
с эффектом размытия.
Выглядит это правильно, однако при прокрутке анимация кажется прерывистой. Кроме того, переход время от времени зависает:
Мой код выглядит следующим образом:
UINavigationController
:
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 13.0, *) {
self.navigationBar.prefersLargeTitles = true
let style = UINavigationBarAppearance()
style.configureWithDefaultBackground()
style.titleTextAttributes = [.font: UIFont.systemFont(ofSize: 18)]
self.navigationBar.standardAppearance = style
self.navigationBar.compactAppearance = style
//Configure Large Style
let largeStyle = UINavigationBarAppearance()
largeStyle.configureWithTransparentBackground()
largeStyle.largeTitleTextAttributes = [.font: UIFont.systemFont(ofSize: 28)]
self.navigationBar.scrollEdgeAppearance = largeStyle
}
}
В UITableView
находится внутри UINavigationController
. Обе взяты из раскадровки последовательным способом.
5 ответов
Вместо UITableview вы можете попробовать использовать UITableViewController. Я пробовал использовать UITableViewController, и он отлично работает для меня. Пожалуйста, проверьте следующий дизайн и код.
class ViewController: UITableViewController
{
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 13.0, *) {
self.navigationController?.navigationBar.prefersLargeTitles = true
let style = UINavigationBarAppearance()
style.configureWithDefaultBackground()
style.titleTextAttributes = [.font: UIFont.systemFont(ofSize: 18)]
self.navigationController?.navigationBar.standardAppearance = style
self.navigationController?.navigationBar.compactAppearance = style
//Configure Large Style
let largeStyle = UINavigationBarAppearance()
largeStyle.configureWithTransparentBackground()
largeStyle.largeTitleTextAttributes = [.font: UIFont.systemFont(ofSize: 28)]
self.navigationController?.navigationBar.scrollEdgeAppearance = largeStyle
}
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
// Do any additional setup after loading the view.
}
override func numberOfSections(in tableView: UITableView) -> Int {
1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
10
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = "\(indexPath.row)"
return cell
}
}
Выход:-
Отладка - 1) В отладчике просмотра проверьте, выходит ли заголовок навигации за пределы панели навигации.
Если это так, то
let titleHeight = UIFont.systemFont(ofSize: 28).lineHeight
if titleHeight > self.view.frame.size.height {
self.navigationController.navigationBar.frame = CGRectMake(0, 0, self.view.frame.size.width, titleHeight + topAndBottomPadding)
}
Эй, как дела, вот ваш код, попробуйте удалить эту строку
largeStyle.configureWithTransparentBackground()
вы должны настроить с белым фоном
ваш код:
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 13.0, *) {
self.navigationBar.prefersLargeTitles = true
let style = UINavigationBarAppearance()
style.configureWithDefaultBackground()
style.titleTextAttributes = [.font: UIFont.systemFont(ofSize: 18)]
self.navigationBar.standardAppearance = style
self.navigationBar.compactAppearance = style
//Configure Large Style
let largeStyle = UINavigationBarAppearance()
largeStyle.configureWithTransparentBackground()
largeStyle.largeTitleTextAttributes = [.font: UIFont.systemFont(ofSize: 28)]
self.navigationBar.scrollEdgeAppearance = largeStyle
}
}
Изменение свойств через ночь раскадровки, у меня есть некоторые идеи. Обычно, когда я застреваю, я отражаю те же изменения, которые я программно внес в раскадровку, и то, что осталось в коде, обычно вызывает мою ошибку. попробуйте это, если возможно
Чтобы большой заголовок панели навигации не менял свой тяжелый шрифт по умолчанию, нам следует избегать изменения шрифта вUINavigationBarAppearance
.
// Fix the issue of transparent navigation when pushing
if #available(iOS 13.0, *) {
self.navigationController?.navigationBar.prefersLargeTitles = true
let style = UINavigationBarAppearance()
style.configureWithDefaultBackground()
self.navigationController?.navigationBar.standardAppearance = style
self.navigationController?.navigationBar.compactAppearance = style
//Configure Large Style
let largeStyle = UINavigationBarAppearance()
largeStyle.configureWithTransparentBackground()
self.navigationController?.navigationBar.scrollEdgeAppearance = largeStyle
}