swift iOS 11首选方向更改后大标题不扩展

kqhtkvqz  于 2023-01-25  发布在  Swift
关注(0)|答案(3)|浏览(142)

我已经实现了iOS 11的功能***prefersLargeTitles***,它运行得很好。人像模式按预期运行:

我知道大标题在横向模式下总是保持折叠(小),这对我来说没问题。问题是当我尝试切换到横向模式,然后再切换到纵向模式时,大标题在纵向模式下应该默认展开(大),但直到我向下滚动一点才能展开:

我的代码看起来很简单:

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

我也尝试过在***tableView.contentInsetAdjustmentBehavior***上使用不同的值,没有任何变化。我现在正在解决这个问题,在方向改变后通过编程方式向下滚动表格,但我认为这只是一个(不是很好的)解决方案。
这应该像预期的那样工作吗?这是我的实现中留下的东西吗?有没有更好的解决方法?

sshcrbum

sshcrbum1#

我也遇到过同样的问题。这对我很有效。

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

vddsk6oq2#

一种方法是保存导航栏的最大高度,然后在旋转时进行设置。
大概是这样的

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)
}

在风景中,系统知道它必须改变大小,所以你不必担心它。
@拉萨尔@两条鱼

brgchamk

brgchamk3#

iOS 16操作系统

首先在ViewDidLoad()或情节提要的NavigationBar上将PrefersLargeTitles设置为true。
然后在导航控制器的rootController上添加以下内容:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    
    coordinator.animate { (_) in
        self.navigationController?.navigationBar.sizeToFit()
    }
}

相关问题