更改导航控制器在视图控制器中的附加安全区域设置

问题描述 投票:0回答:1

我正在尝试使用

additionalSafeAreaInsets
在导航控制器上方添加额外的空间(基本上我想将整个导航控制器及其子视图控制器向下移动 50px 到 100px 之间的动态量以在那里添加另一个视图)。

当我在我的视图控制器中更改

self.navigationController!.additionalSafeAreaInsets.top
时,视觉上没有任何变化,除非我将导航栏切换为隐藏/不隐藏:

self.navigationController!.setNavigationBarHidden(true, animated: false);
self.navigationController!.setNavigationBarHidden(false, animated: false);

我怀疑这是执行此操作的有效方法——是否有正确的方法来根据新的

additionalSafeAreaInsets.top
值触发自动布局更新?

ios swift uiviewcontroller uinavigationcontroller autolayout
1个回答
-2
投票

尝试用我的扩展配置navigationBar

extension UIViewController {
func configureNavigationBar(largeTitleColor: UIColor, backgoundColor: UIColor, tintColor: UIColor, title: String, preferredLargeTitle: Bool) {
if #available(iOS 13.0, *) {
    let navBarAppearance = UINavigationBarAppearance()
    navBarAppearance.configureWithOpaqueBackground()
    navBarAppearance.largeTitleTextAttributes = [.foregroundColor: largeTitleColor]
    navBarAppearance.titleTextAttributes = [.foregroundColor: largeTitleColor]
    navBarAppearance.backgroundColor = backgoundColor
    
    navigationController?.navigationBar.standardAppearance = navBarAppearance
    navigationController?.navigationBar.compactAppearance = navBarAppearance
    navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance
    
    navigationController?.navigationBar.prefersLargeTitles = preferredLargeTitle
    navigationItem.largeTitleDisplayMode = .always
    navigationController?.navigationBar.isTranslucent = false
    navigationController?.navigationBar.tintColor = tintColor
    navigationItem.title = title
    
} else {
    // Fallback on earlier versions
    navigationController?.navigationBar.barTintColor = backgoundColor
    navigationController?.navigationBar.tintColor = tintColor
    navigationController?.navigationBar.isTranslucent = false
    navigationItem.title = title
    }
  }
}

之后在 viewDidLoad:

configureNavigationBar(largeTitleColor: .black, backgoundColor: .white, tintColor: .black, title: "Example", preferredLargeTitle: true)
navigationController?.additionalSafeAreaInsets = .init(top: 60, left: 0, bottom: 0, right: 0)
© www.soinside.com 2019 - 2024. All rights reserved.