iOS14 navigationItem.LarGetTitleDisplayMode=。始终不工作
我有一个iOS14 navigationItem.LarGetTitleDisplayMode=。始终不工作,ios,uinavigationcontroller,uinavigationbar,ios14,Ios,Uinavigationcontroller,Uinavigationbar,Ios14,我有一个ViewController和一个DetailViewController,在ViewController的viewdiload中我设置了以下代码,目的是使ViewController始终使用大标题 navigationItem.largeTitleDisplayMode = .never self.navigationController?.navigationBar.prefersLargeTitles=true navigationItem.LarGetTitleDisplayM
ViewController
和一个DetailViewController
,在ViewController
的viewdiload
中我设置了以下代码,目的是使ViewController
始终使用大标题
navigationItem.largeTitleDisplayMode = .never
self.navigationController?.navigationBar.prefersLargeTitles=true
navigationItem.LarGetTitleDisplayMode=.always
在DetailViewController
的viewdiload
中,我设置了以下代码,目的是使DetailViewController
不使用大标题
navigationItem.largeTitleDisplayMode = .never
当我从DetailViewController
返回到ViewController
时,会在ViewController
中显示小标题而不是大标题。此代码在iOS12和iOS13中是正确的。如何使视图控制器在iOS14上始终显示大标题
当前正在从应用商店使用Xcode12使用我的扩展名:
extension UIViewController {
func configureNavigationBar(largeTitleColor: UIColor, backgoundColor: UIColor, tintColor: UIColor, title: String, preferredLargeTitle: Bool) {
if #available(iOS 13.0, *) {
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.configureWithOpaqueBackground()
navBarAppearance.largeTitleTextAttributes = [.foregroundColor: largeTitleColor]
navBarAppearance.titleTextAttributes = [.foregroundColor: largeTitleColor]
navBarAppearance.backgroundColor = backgoundColor
navigationController?.navigationBar.standardAppearance = navBarAppearance
navigationController?.navigationBar.compactAppearance = navBarAppearance
navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance
navigationController?.navigationBar.prefersLargeTitles = preferredLargeTitle
navigationController?.navigationBar.isTranslucent = false
navigationController?.navigationBar.tintColor = tintColor
navigationItem.title = title
} else {
// Fallback on earlier versions
navigationController?.navigationBar.barTintColor = backgoundColor
navigationController?.navigationBar.tintColor = tintColor
navigationController?.navigationBar.isTranslucent = false
navigationItem.title = title
}
}
}
在视图中设置导航栏将显示:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
configureNavigationBar(largeTitleColor: .white, backgoundColor: .yourColor, tintColor: .white, title: "YourTitle", preferredLargeTitle: true)
}
现在,校准显示详图控制器的函数:
@objc func DetailController(){
let controller = DetailViewController()
controller.navigationItem.largeTitleDisplayMode = .never
navigationController?.pushViewController(controller, animated: true)
}
结果是:
My
ViewController
有一个UIPageViewController
,UIPageViewController
有一个UIScrollView
,这是关键点
在iOS 14的
ViewControllerviewDidLoad中添加view.addSubview(UIView())
,需要添加sizeToFit函数。
下面的代码始终有效
navigationController?.navigationBar.prefersLargeTitles = true
navigationController?.navigationBar.sizeToFit()
终于解决了这个问题
当有机会解决这个问题时
如果您使用的是大标题,并且在同一视图控制器上有多个滚动视图。
导航栏将侦听UIScrollView类子视图上的滚动操作
解决方案
必须防止当前视图控制器的大标题折叠功能
它的概念与提到的@BaQiWL相同。但不仅仅是添加view.addSubview(UIView())
就可以解决这个问题,如果您使用的是故事板的话
为此,必须添加视图作为Viewcontroller的第一个子视图。(view.sendSubviewToBack
起作用)
或通过故事板:
谢谢,但仍然无法在Xcode12和iOS14上工作,您使用的是Xcode12和iOS14吗?是的,它工作正常。。。。看我的新图片回答你在用我的分机吗?删除你所有的导航栏设置,使用扩展,它就像一个魅力…非常感谢,我在一个新的项目中测试了你的代码,没有问题,应该是我的旧版本下的代码有问题project@BaQiWL祝你有愉快的一天:)这对我不起作用。我刚刚在VC-1的didload上打了电话,我也有同样的情况。但是添加子视图并没有解决我的问题。尝试添加到ViewCOntrollerA以及pageviewcontroller中的viewcontroller。