【问题标题】:iOS 11 prefersLargeTitles not expanding after orientation changeiOS 11 prefersLargeTitles 在方向更改后不扩展
【发布时间】:2018-08-24 11:54:26
【问题描述】:

我已经实现了 iOS 11 功能 prefersLargeTitles,它运行良好。纵向模式按预期工作:

我知道大标题在横向模式下将始终保持折叠(小)状态,这对我来说很好。问题是当我尝试更改为横向,然后再次更改为纵向时,默认情况下,大标题应该被扩展(大)回到纵向模式,但直到我向下滚动一点才会发生:

我的代码看起来很简单:

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

我也尝试在 tableView.contentInsetAdjustmentBehavior 上使用不同的值,但没有任何改变。我现在通过在方向更改后以编程方式向下滚动表格来解决它,但我认为这只是一个(不是很好的)解决方法。

这应该按预期工作吗?我的实现中是否还有一些东西?有更好的解决方法吗?

【问题讨论】:

  • 您好,您找到解决方案了吗。我在切换大标题时遇到了同样的问题:self.navigationController?.navigationBar.prefersLargeTitles = !(self.navigationController?.navigationBar.prefersLargeTitles)!
  • 嗨。不幸的是我没有。方向更改后,我仍在使用解决方法。
  • 嘿!我也有同样的问题。您可以通过回答自己的问题来发布解决方法吗?
  • 你们有没有找到解决这个问题的方法?总是这样吗?我在拆分视图控制器中有我的导航控制器。这可能是罪魁祸首吗?

标签: ios swift uitableview orientation ios11


【解决方案1】:

我遇到了同样的问题。这对我有用。

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        navigationItem.largeTitleDisplayMode = .always
        coordinator.animate(alongsideTransition: { (_) in
            self.coordinator?.navigationController.navigationBar.sizeToFit()
        }, completion: nil)
    }

【讨论】:

  • 简单解释一下。
  • 当然,因为我的 navigationItem 有一个 always largeTitleDisplayMode ,它会尝试通过 sizeToFit() 在方向更改时设置大标题。我正在为我的 VC 使用协调器模式,因此 self.coordinator? 但导航栏上的 sizeToFit 应该调整导航栏的大小以显示大标题(如果可以)。
  • @Umar 但是,当我们执行 sizeToFit 时,我们无法保留滚动位置。
【解决方案2】:

一种方法是保存最大导航栏高度,并在旋转时设置。

类似这样的:


var maximumHeight: CGFloat = 0

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

        super.viewWillTransition(to: size, with: coordinator)

        guard let navigationController = navigationController else {
            return
        }

        if maximumHeight < navigationController.navigationBar.frame.height {
            maximumHeight = navigationController.navigationBar.frame.height
        }

        coordinator.animate(alongsideTransition: { (_) in

            navigationController.navigationBar.frame.size.height = self.maximumHeight

        }, completion: nil)
}

在横向,系统知道它必须改变它的大小,所以你不必担心它。

@rassar @twofish

【讨论】:

    猜你喜欢
    • 2017-11-10
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多