我正在尝试使用
additionalSafeAreaInsets
在导航控制器上方添加额外的空间(基本上我想将整个导航控制器及其子视图控制器向下移动 50px 到 100px 之间的动态量以在那里添加另一个视图)。
当我在我的视图控制器中更改
self.navigationController!.additionalSafeAreaInsets.top
时,视觉上没有任何变化,除非我将导航栏切换为隐藏/不隐藏:
self.navigationController!.setNavigationBarHidden(true, animated: false);
self.navigationController!.setNavigationBarHidden(false, animated: false);
我怀疑这是执行此操作的有效方法——是否有正确的方法来根据新的
additionalSafeAreaInsets.top
值触发自动布局更新?
尝试用我的扩展配置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)