首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 11 prefersLargeTitles直到滚动后才会显示

iOS 11 prefersLargeTitles直到滚动后才会显示
EN

Stack Overflow用户
提问于 2018-01-16 17:09:21
回答 3查看 2.7K关注 0票数 4

在使用表视图控制器时,我遇到了iOS 11的大标题问题。

我在viewDidLoad中将prefersLargeTitles设置为true:

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.prefersLargeTitles = true
}

运行我的应用程序时,标题看起来好像prefersLargeTitles设置为小,但如果我向下滚动,就会出现大标题。

我有2个UIViewControllers,除了UITableViewController,它们都能正确地显示大标题。

我尝试过在代码和情节提要中将prefersLargeTitles设置为true的不同组合,您可以将Large Title设置为AutomaticAlwaysNever

我只能在Stack Overflow上找到一个与这个问题相关的问题,但似乎没有一个答案能解决这个问题。

有没有其他遇到这个问题的人能够解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-16 18:21:01

您需要在导航控制器上启用大标题。它很难找到,所以请看下面的截图。

如果您的表视图控制器继续到其他细节视图控制器上,那么您应该在情节提要中为那些其他视图控制器将large title设置为Never

不要在这样的代码中干扰prefersLargeTitles

代码语言:javascript
复制
      self.navigationController?.navigationBar.prefersLargeTitles = false
票数 1
EN

Stack Overflow用户

发布于 2018-06-28 21:49:28

在设置prefersLargeTitles之后,您可以通过在UITableView上调用setContentOffset来触发显示大标题。

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.prefersLargeTitles = true
    self.tableView.setContentOffset(CGPoint(x: 0, y: -1), animated: true)
}
票数 4
EN

Stack Overflow用户

发布于 2019-11-14 01:45:27

也许你是在viewDidLoad之前重新加载tableView?我今天也观察到了同样的行为。在我的例子中,我在一个名为tableView.reloadData的变量上设置了一个在viewDidLoad之前设置的didSet

我能够通过添加一个保护来修复这个问题,因此只有当变量以前不是nil时才会发生reloadData,这意味着第一次。

下面是我的调用类以供参考。

代码语言:javascript
复制
/// 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语句...

代码语言:javascript
复制
/// Detail Controller in UISplitViewController
class MyTableViewController: UITableViewController {

  var instanceVariable: MyData! {
    didSet {
      guard oldValue != nil else { return }
      tableView.reloadData()
    }
  }

  // UITableViewController Methods...
}

希望这能有所帮助!如果我的例子没有意义,我建议注释掉所有对tableView.reloadData的引用,然后只在确定它们在tableView初始加载之前不会被调用时才重新添加。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48277586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档