【问题标题】:Swift remove space of Navigation Bar from UITabBarControllerSwift 从 UITabBarController 中删除导航栏的空间
【发布时间】:2021-07-02 18:55:57
【问题描述】:

我正在制作一个 iOS 应用程序,以编程方式创建 UI,到目前为止,我要做的是在 UITabBarController 的一个选项卡内显示带有 MapKit 的地图,我正在尝试制作地图在 iPhone X(及更高版本)中使用凹槽下方的完整空间,但它在下方,就好像 NavigationController 的标题在那里一样。

即使我尝试删除 titleView,它仍然存在。

TabBarViewController

import UIKit

class TabBarViewController: UITabBarController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .systemBackground
        UITabBar.appearance().barTintColor = .systemBackground
        tabBar.tintColor = .label
        setupVCs()
    }
    
    func setupVCs() {
        viewControllers = [
            createNavController(for: MapViewController(), title: NSLocalizedString("Search", comment: ""), image: UIImage(systemName: "magnifyingglass")!),
            createNavController(for: ViewController(), title: NSLocalizedString("Home", comment: ""), image: UIImage(systemName: "house")!),
            createNavController(for: ViewController(), title: NSLocalizedString("Profile", comment: ""), image: UIImage(systemName: "person")!)
        ]
    }
    
    fileprivate func createNavController(for rootViewController: UIViewController, title: String, image: UIImage) -> UIViewController {
        
        let navController = UINavigationController(rootViewController: rootViewController)
        navController.tabBarItem.title = title
        navController.tabBarItem.image = image
        //rootViewController.navigationItem.title = title
        rootViewController.navigationController?.isToolbarHidden = true
        navigationItem.titleView?.removeFromSuperview()
        navigationItem.title?.removeAll()

        return navController
    }
}

地图视图控制器

import UIKit
import MapKit

class MapViewController: UIViewController {
    var mapView: MKMapView!
    let annotation = MKPointAnnotation()
    
    override func viewWillAppear(_ animated: Bool) {
        navigationController?.setToolbarHidden(true, animated: false)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .black
        
        mapView = MKMapView()
        mapView.translatesAutoresizingMaskIntoConstraints = false
        
        view.addSubview(mapView)
        setupConstraints()
    }
    
    fileprivate func setupConstraints() {
        let mapViewLeadingAnchor = mapView.leadingAnchor.constraint(equalTo: view.leadingAnchor)
        let mapViewTrailingAnchor = mapView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
        let mapViewTopAnchor = mapView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
        let mapViewBottomAnchor = mapView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
        
        NSLayoutConstraint.activate([mapViewLeadingAnchor, mapViewTrailingAnchor, mapViewTopAnchor, mapViewBottomAnchor])
    }
}

这是设置标题时地图的样子,没有设置标题,我只是设置标题,看看是不是因为这个。

如何去除凹槽下方的多余空间?

【问题讨论】:

    标签: ios swift uitabbarcontroller uinavigationbar nslayoutconstraint


    【解决方案1】:

    所以基本上你需要在这里做两件事才能隐藏地图标签中的导航栏:

    • viewWillAppearviewDidLoadMapViewController 中隐藏导航栏:
    navigationController?.setNavigationBarHidden(true, animated: false)
    
    • 将顶部约束从 safeArea 更改为视图本身:
    let mapViewTopAnchor = mapView.topAnchor.constraint(equalTo: view.topAnchor)
    

    【讨论】:

    • 其实安全区是对的,我错叫setToolbarHidden而不是setNavigationBarHidden
    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2020-05-15
    相关资源
    最近更新 更多