I have a tableview displaying on a main view controller, and when a row is selected a detail view controller is pushed. 我有一个主视图控制器的大标题,以及详细视图控制器的小/常规标题。它们嵌入在导航控制器和标签栏控制器中。
Before selecting a row, the main view controller title is large, and when a row is selected the detail view controller title is regular as it should be. 但是,当我从详细视图控制器(通过“后退”按钮)返回主视图控制器时,主视图控制器上的标题不再大。
我在主视图控制器上将“prefersLargeTitles”设置为true,在详细视图控制器上将“largeTitleDisplayMode”设置为从不。
我曾尝试将“largeTitleDisplayMode”设置为始终在主视图控制器上,但无济于事。我还尝试在任一视图控制器上将其设置为自动,但似乎没有效果。
我还尝试使用“viewWillAppear”和“viewWillDisappear”并在那里设置标题,虽然它确实将主视图控制器标题重置回大,但动画滞后并且不像通常那样平滑小标题到大标题。
此外,我对编码还很陌生,这是我在不使用故事板的情况下构建的第一个应用程序,因此代码可能会一团糟。
主视图控制器代码:
class HomeViewController: UIViewController {
let tableView = UITableView()
override func loadView() {
super.loadView()
view.backgroundColor = .white
self.title = "Home"
// Set large title …Run Code Online (Sandbox Code Playgroud) 如何检测 iPad 多任务处理(即另一个应用程序显示在屏幕上,与我的应用程序并排放置)何时处于活动状态?
我有UISplitViewController以下参数设置如下:
preferredDisplayMode = .twoBesideSecondary
preferredSplitBehavior = .tile
setViewController(SidebarVC(), for: .primary)
setViewController(SuppVC(), for: .supplementary)
setViewController(SecondaryVC(), for: .secondary)
Run Code Online (Sandbox Code Playgroud)
在横向模式下,所有 3 列 ( .primary, .supplementary, .secondary)都有足够的空间。在纵向或多任务处理时,屏幕宽度更窄,我的第 3 列 ( .secondary) 变得非常窄。水平尺寸类保持规则,所以我不能用它来检测它。(当水平尺寸类变得紧凑时,我的UISplitViewController.compact显示和工作都很好)。
我想将UISplitViewController.displayMode属性更改为.twoDisplaceSecondary屏幕较窄时,但水平尺寸类保持规则(即在纵向时,或当另一个应用程序处于多任务处理时)。这将允许将第 3 列推到屏幕外(移位)而不是压扁。
我正在寻找的确切行为的一个完美示例是 iOS 14 中 iPad 上的联系人应用程序。它使用三列布局,似乎显示模式为.tile。当应用横向全屏时,所有 3 列都会显示,并且有足够的空间不会发生挤压。但是,如果您将另一个应用程序带入多任务处理(从而使联系人应用程序宽度变窄,但水平尺寸类保持正常),则 displayMode 似乎更改为.twoDisplaceSecondary,并且第三列被推离屏幕而不是被压扁。
我想我可以通过viewWillTransitionToSize()方法管理方向更改,但我一直无法找到委托或其他方式来检测应用程序何时变窄,但仍然具有.regular水平尺寸类,如联系人应用程序,似乎能够做到.
您可以在第二个屏幕截图中看到,当空间不足时,第 3 列被置换而不是被压扁。