iOS 11更喜欢大标题,直到滚动才更新

Joh*_*een 31 cocoa-touch uikit uinavigationcontroller ios swift

我实现了一个带有UITableView的基本UIViewController,它包含在UINavigationController中.我设置prefersLargeTitles为true:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    navigationController?.navigationBar.prefersLargeTitles = true
    navigationItem.title = "Coffees"
}
Run Code Online (Sandbox Code Playgroud)

但是,标题保持很小,直到我滚动视图,此时它会放大.我尝试将该调用移动到我创建UINavigationController的位置,但没有效果.我确定我设置时navigationController不是nil prefersLargeTitles.

我应该在其他地方更新该房产吗?或者我应该提交雷达?

更新:

如果我的视图包含一个UITableView或本身就是一个,这似乎只会发生UITableViewController

Trz*_*cje 41

对我来说,唯一可行的解​​决方案是:

DispatchQueue.main.async { [weak self] in
    self?.navigationController?.navigationBar.sizeToFit()
}
Run Code Online (Sandbox Code Playgroud)

viewWillAppear()
Run Code Online (Sandbox Code Playgroud)

  • 我讨厌这解决了我的问题。+1 (16认同)

Pac*_*ong 20

我有同样的问题.虽然你没有使用故事板,但我希望这可以帮助某人.我检查了导航控制器(不是视图控制器)的"首选大标题"我嵌入了我的TableViewController.导航控制器转动后所有的视图控制器都有大标题,它应该可以工作.


小智 13

我只在一个tableview上遇到同样的问题......

我必须设置:

self.tableView.contentInsetAdjustmentBehavior = .never
Run Code Online (Sandbox Code Playgroud)

这样我的tableview在加载uiviewcontroller时停止滚动.

这是tableview自动滚动,可以隐藏大标题

希望这可以帮助

  • 这掩盖了导航栏后面第一行的大标题? (3认同)

tit*_*nus 11

我最近遇到了同样的问题,没有任何建议对我有用。相反,我要做的就是调用sizeToFit()。样例代码:

private func configureNavigator() {
    guard let navigationController = navigationController else { return }
    navigationController.navigationBar.prefersLargeTitles = true
    navigationItem.largeTitleDisplayMode = .automatic
    navigationController.navigationBar.sizeToFit()
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

  • 这是完美的 `navigationController?.navigationBar.sizeToFit()` (9认同)
  • 当 ViewController 在 UITabBarController 中时,这也对我有用。 (3认同)

小智 7

Swift 5.2 也有同样的问题

我的视图包含 tableView 且 PreferredLargeTitles 在滚动之前不会更新,我通过设置修复了它

在此输入图像描述

self.tableView.contentInsetAdjustmentBehavior = .never
Run Code Online (Sandbox Code Playgroud)


Pau*_*bre 6

修改 tableView 的 contentInsettop:1将强制 NavigationBar 展开并显示大标题。

对象-C

-(void) viewWillAppear:(BOOL)animated {
    if (@available(iOS 11.0, *)) {
        tableView.contentInset = UIEdgeInsetsMake(1, 0, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

迅速

override func viewWillAppear(_ animated: Bool) {
    if #available(iOS 11.0, *) {
        tableView.contentInset = UIEdgeInsetsMake(1, 0, 0, 0)
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:如果你有一个tableView.reloadData(),请viewWillAppear确保在编辑后调用它contentInset