iOS 11首选目标在滚动之前不显示
我在使用表视图控制器时遇到了iOS 11大标题的问题 我已在viewDidLoad中将iOS 11首选目标在滚动之前不显示,ios,swift,uitableview,uinavigationcontroller,uikit,Ios,Swift,Uitableview,Uinavigationcontroller,Uikit,我在使用表视图控制器时遇到了iOS 11大标题的问题 我已在viewDidLoad中将首选目标设置为true: override func viewDidLoad() { super.viewDidLoad() navigationController?.navigationBar.prefersLargeTitles = true } 运行我的应用程序时,标题显示为prefersLargeTitles设置为小,但如果我向下滚动,则会显示大标题 我有两个uiviewcontr
首选目标设置为true:
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
}
运行我的应用程序时,标题显示为prefersLargeTitles
设置为小,但如果我向下滚动,则会显示大标题
我有两个uiviewcontroller
,它们都正确地显示了大标题,并在UITableViewController
栏上显示
我在代码和情节提要中尝试了将首选目标设置为true的不同组合,您可以将大标题设置为自动
,始终
或从不
我只能找到另一个关于堆栈溢出的问题,它涉及到这个确切的问题,但没有一个答案能够解决它
遇到此问题的其他人是否能够解决此问题?您需要在导航控制器上启用大标题。很难找到,所以请看下面的截图。
如果您的表视图控制器继续连接到其他细节视图控制器,则应在这些其他视图控制器的故事板中将大标题
设置为从不
不要在这样的代码中乱用prefersLargeTitles
:
self.navigationController?.navigationBar.prefersLargeTitles = false
设置preferslargetiles
后,可以通过在UITableView上调用setContentOffset来触发显示大标题
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
self.tableView.setContentOffset(CGPoint(x: 0, y: -1), animated: true)
}
可能是在viewdiload
之前重新加载tableView
?我今天也观察到了同样的行为。在我的例子中,我在一个变量上设置了一个didSet
,该变量在viewDidLoad
之前被设置为tableView.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
最初加载之后才被调用时才重新添加。这解决了我几个月来一直遇到的问题。在我的例子中,我在didSet块中设置了表视图数据源,它生成了您描述的确切行为。谢谢!这是唯一对我有效的解决方案!