使用表视图控制器时,我遇到了iOS 11大型游戏的问题。
我在viewDidLoad中将prefersLargeTitles
设置为true:
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
}
在运行我的应用时,标题显示为prefersLargeTitles
设置为小,但如果我向下滚动,则会显示大标题。
我有2 UIViewControllers
,他们都正确显示大标题,禁止UITableViewController
。
我在代码和故事板中尝试了将prefersLargeTitles
设置为true的不同组合,您可以将Large Title
设置为Automatic
,Always
或{{1 }}
我只能在Stack Overflow上找到另一个问题来引用这个确切的问题,但没有一个答案似乎可以解决它。
遇到此问题的其他人是否能够解决它?
答案 0 :(得分:1)
您需要在导航控制器上启用大型标题。找到它很棘手,所以请看下面的截图。
如果您的表视图控制器切换到其他详细视图控制器,那么您应该在故事板中为那些其他视图控制器设置large title
到Never
。
请勿在代码中使用prefersLargeTitles
:
self.navigationController?.navigationBar.prefersLargeTitles = false
答案 1 :(得分:0)
设置prefersLargeTitles
后,您可以通过在UITableView上调用setContentOffset来触发大标题显示。
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
self.tableView.setContentOffset(CGPoint(x: 0, y: -1), animated: true)
}
答案 2 :(得分:0)
也许您要在tableView
之前重新加载viewDidLoad
?我今天观察到了相同的行为。就我而言,我在didSet
之前设置的名为viewDidLoad
的变量上有一个tableView.reloadData
。
我能够通过添加防护来解决此问题,因此reloadData
仅在变量先前不是nil
时才发生,这是第一次。
这是我的电话班供参考...
/// 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
之后才调用它们时才重新添加。>