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 行为