在使用表视图控制器时,我遇到了iOS 11的大标题问题。
我在viewDidLoad中将prefersLargeTitles设置为true:
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
}运行我的应用程序时,标题看起来好像prefersLargeTitles设置为小,但如果我向下滚动,就会出现大标题。
我有2个UIViewControllers,除了UITableViewController,它们都能正确地显示大标题。
我尝试过在代码和情节提要中将prefersLargeTitles设置为true的不同组合,您可以将Large Title设置为Automatic、Always或Never。
我只能在Stack Overflow上找到一个与这个问题相关的问题,但似乎没有一个答案能解决这个问题。
有没有其他遇到这个问题的人能够解决这个问题?
发布于 2018-01-16 18:21:01
您需要在导航控制器上启用大标题。它很难找到,所以请看下面的截图。

如果您的表视图控制器继续到其他细节视图控制器上,那么您应该在情节提要中为那些其他视图控制器将large title设置为Never。
不要在这样的代码中干扰prefersLargeTitles:
self.navigationController?.navigationBar.prefersLargeTitles = false发布于 2018-06-28 21:49:28
在设置prefersLargeTitles之后,您可以通过在UITableView上调用setContentOffset来触发显示大标题。
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
self.tableView.setContentOffset(CGPoint(x: 0, y: -1), animated: true)
}发布于 2019-11-14 01:45:27
也许你是在viewDidLoad之前重新加载tableView?我今天也观察到了同样的行为。在我的例子中,我在一个名为tableView.reloadData的变量上设置了一个在viewDidLoad之前设置的didSet。
我能够通过添加一个保护来修复这个问题,因此只有当变量以前不是nil时才会发生reloadData,这意味着第一次。
下面是我的调用类以供参考。
/// Master Controller in UISplitViewController
class MyMasterViewController: UIViewController {
private let controller = MyTableViewController()
override func viewDidLoad() {
super.viewDidLoad()
controller.instanceVariable = data
showDetailViewController(navigationController, sender: self)
}
...
private func reloadDetail() {
controller.instanceVariable = newData
}
}下面是修复方法-添加了下面的guard语句...
/// Detail Controller in UISplitViewController
class MyTableViewController: UITableViewController {
var instanceVariable: MyData! {
didSet {
guard oldValue != nil else { return }
tableView.reloadData()
}
}
// UITableViewController Methods...
}希望这能有所帮助!如果我的例子没有意义,我建议注释掉所有对tableView.reloadData的引用,然后只在确定它们在tableView初始加载之前不会被调用时才重新添加。
https://stackoverflow.com/questions/48277586
复制相似问题