导航栏未完全覆盖手机屏幕顶部

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

我添加了一个没有导航控制器的导航栏,因此导航栏只是一个条带。有没有办法让导航栏覆盖整个手机屏幕顶部?

ios swift uinavigationbar
5个回答
2
投票

尝试为导航栏设置委托对象。类似的东西;

navigationBar.delegate = self

符合委托对象中的

UIBarPositioningDelegate
并将栏附加到顶部;

ViewController: UIViewController, UIBarPositioningDelegate {
    
    func position(for bar: UIBarPositioning) -> UIBarPosition {
        return .topAttached
    }
    
}

1
投票

如果您使用 SwiftUI,您可以将此修饰符添加到您的 NavigationView 中:

.edgesIgnoringSafeArea(.top)

0
投票

如果没有导航控制器,您将负责调整栏的大小和位置。请尝试添加一些约束,将顶部、前导和尾随锚点固定到超级视图的顶部、前导和尾随锚点。接下来,添加一个约束,将导航栏的底部固定到安全区域的底部,常数为 44 点,无论您想要什么高度。


0
投票

只需在虚拟导航栏顶部添加一个虚拟视图,在控制器声明类下声明您的顶部视图:

let topView = UIView()

现在在viewDidLoad中设置topView背景颜色并添加约束:

topView.backgroundColor = .white // the background must be the same of your dummyNavBar
topView.translatesAutoresizingMaskIntoConstraints = false

view.addSubview(topView)
topView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
topView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
topView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
topView.bottomAnchor.constraint(equalTo: yourDummynavBar.topAnchor).isActive = true

-1
投票

您可以使用 iOS 15* 的 UINavigationBarAppearance(),如下所示:

let appearance = UINavigationBarAppearance()
    appearance.backgroundColor = UIColor.blue
    appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
    UINavigationBar.appearance().scrollEdgeAppearance = appearance
© www.soinside.com 2019 - 2024. All rights reserved.