prefersLargeTitles 不适用于程序化布局

Posted

技术标签:

【中文标题】prefersLargeTitles 不适用于程序化布局【英文标题】:prefersLargeTitles doesn't work with programmatic layout 【发布时间】:2018-01-19 20:14:38 【问题描述】:

我正在尝试以编程方式添加表格视图,但未显示大标题。

这是我的代码:

self.view.addSubview(module.tableView)

module.view.translatesAutoresizingMaskIntoConstraints = false

if #available(ios 11.0, *) 
    NSLayoutConstraint.activate([
        module.view.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 0),
        module.view.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor, constant: 0),
        module.view.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor, constant: 0),
        module.view.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: 0)
    ])

注意:视图控制器中启用了大标题

if #available(iOS 11.0, *) 
    navigationController?.navigationBar.prefersLargeTitles = true
    navigationItem.largeTitleDisplayMode = .always

也许这很重要:我正在尝试添加一个表格作为子视图控制器。我的子控制器是 UITableViewController。如果我在viewDidLoad() 中添加子视图,大标题显示但不滚动。

这是我添加子模块的link to file。您可以在addChild(module:)方法中看到有问题的详细代码或here。

请告诉我如何修复此错误。

【问题讨论】:

【参考方案1】:

我正在使用程序化布局并遇到了类似的问题。我在这里找到了解决方案:https://***.com/a/46692583/131378。在viewDidLoad() 中,我不得不将largeTitleDisplayMode 关闭再打开。这是使大标题与滚动一起使用的正确组合:

self.navigationItem.largeTitleDisplayMode = .never
self.navigationItem.largeTitleDisplayMode = .always

【讨论】:

【参考方案2】:

在您配置表格视图的视图控制器的viewDidLoad 方法中启用大标题。

if #available(iOS 11, *) 
    self.navigationController?.navigationBar.prefersLargeTitles = true

【讨论】:

我已启用此功能 谢谢。如何添加与大标题相关的表格视图?没有表格相关代码,大标题是否有效? 没有表格的大标题作品(仅显示大状态)。如果我在情节提要中添加表格视图,那么一切都很完美。也许这很重要:我正在尝试添加一个表作为子视图控制器 你能把代码贴在你小时候添加的地方吗? 当然。这是我添加子模块的link to file。您可以在 addChild(module:) 方法中看到有问题或 here 的详细代码。【参考方案3】:

将您的 iOS Deployment Target 更新为 11.0 或更高版本。目前,它位于10.3。这就是为什么您看不到大标题的原因。

【讨论】:

我确实看到您在“Main.storyboard”中嵌入了一个导航控制器,但是在您的项目设置中,您需要在“CategoriesViewController.storyboard”中嵌入另一个。 CategoriesViewController 以编程方式嵌入 AppDelegate 并设置为根视图 哎呀!我忽略了...我已经编辑了我的解决方案。让我知道它是否有效。 新解决方案不起作用我看到小标题 :( 也许这很重要:如果我在 viewDidLoad() 中添加子视图,大标题显示但不滚动 我检查了您的项目,我意识到当categoriesListModule 作为子级添加到CategoriesModuleConfigurator.swift 内部的CategoriesViewController 实例时,问题就出现了。【参考方案4】:

您必须单击导航栏上的主导航控制器,然后在属性检查器中选择“首选大标题”。

【讨论】:

我正在以编程方式使用UINavigationController,并尝试从代码中设置prefersLargeTitles【参考方案5】:

试试这个,旧的答案不起作用! https://developer.apple.com/forums/thread/82213?answerId=662742022#662742022

【讨论】:

以上是关于prefersLargeTitles 不适用于程序化布局的主要内容,如果未能解决你的问题,请参考以下文章

使用 prefersLargeTitles 和 UITableView 平滑滚动

更改导航栏“prefersLargeTitles”时的平滑过渡

如何使用 prefersLargeTitles 更改标题注册表?

iOS 11 prefersLargeTitles 以 uibutton 作为标题

当 prefersLargeTitles 为 true 时自定义 NavigatioItem TitleView

UINavigationBar.prefersLargeTitles 打开时的错误 UIRefreshControl 行为