[Swift / iOS] navigationBar가 너무 두꺼울 때.. 해결방법

이경은·2024년 2월 22일
0

흠.. UINavigationBar가 너무 크게 보인다..

팀프로젝트를 준비하면서 figma로 작성한 와이어프레임을 미리 간단하게 만들어보려는데, navigationBar가 너무 두껍게 나오고 있었다.

isNavigationBarHidden을 true로도 해보고, TabBarController에서 UINavigationController를 사용하지 않았는데도 navigationBar가 사라지지 않는다...

한참을 만지작거리다가 알게된 사실..
코드로 UI를 구성하겠다고 SceneDelegate에서 rootViewController에 UINavigationController를 사용하고 있었다.

1번2번에서 특정 ViewController를 rootViewController로 가지도록 만들었던 것!

// SceneDelegate.swift
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        let mainViewController = TabBarController()
        
        // 1. 여기서 rootViewController를 TabBarController를 rootViewController로 가지는 UINavigationController로 지정했고
        let navigationController = UINavigationController(rootViewController: mainViewController)
        window?.rootViewController = navigationController
        window?.makeKeyAndVisible()
    }
    
// 이하 생략



//  TabBarController.swift
class TabBarController: UITabBarController {
    
    // 2. 여기서도 TabBar에 들어갈 homeVC를 UINavigationController의 rootViewController로 사용하고 있었다.
    let homeVC = UINavigationController.init(rootViewController:MainVC())
    let dongGhiVC = DongGhiBooYeoVC()
    let writingVC = FakeVC()
    let mapVC = MapVC()
    let settingVC = UINavigationController.init(rootViewController:SettingVC())

    override func viewDidLoad() {
        super.viewDidLoad()
        setTabBar()
    }
    
    private func setTabBar(){
        self.viewControllers = [homeVC,dongGhiVC, writingVC, mapVC, settingVC]
        
        homeVC.tabBarItem = UITabBarItem(title: "Home", image: UIImage(systemName: "house"), tag: 1)
        dongGhiVC.tabBarItem = UITabBarItem(title: "DongGhi", image: UIImage(systemName: "tree"), tag: 2)
        writingVC.tabBarItem = UITabBarItem(title: "Writing", image: UIImage(systemName: "plus"), tag: 3)
        mapVC.tabBarItem = UITabBarItem(title: "Map", image: UIImage(systemName: "map"), tag: 4)
        settingVC.tabBarItem = UITabBarItem(title: "Setting", image: UIImage(systemName: "gear"), tag: 5)
    }
}

    
}



1번을 아래와 같이 수정하니 원하는대로 navigationBar가 중복해서 보이지 않게 되었다!
위의 사진에서처럼 보이던 것이 아래의 결과로 바뀌게 되었다!

수정한 코드!

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        
        // 1. 여기서 rootViewController를 TabBarController를 rootViewController로 가지는 UINavigationController로 지정했고
        window?.rootViewController = TabBarController()
        window?.makeKeyAndVisible()
    }

끝!

0개의 댓글