view가 겹쳐서 searchBar가 가려서 작동하지않는 현상

임혜정·2024년 7월 26일
1
post-custom-banner

작업역할
맵 뷰를 슈퍼뷰로 로드되도록하고 다른 팀원 분이 서치바를 구현하는 역할.
각 자 작업을 하고 합쳤는데 서치바가 사라짐

아무리 searchBarUI 파일 부분을 수정해봐도 ViewController에서 보이지 않았는데 그것은 ViewController에 로드될때의 자리를 따로 잡아주니까 해결되었음

SearchBarUI.swift 파일 에 자리를 지정하는 함수를 작성


//해당 UI를 MapViewController에서 불러올 때의 자리를 지정
    func setupConstraints(in superview: UIView) {
        superview.addSubview(self)
        superview.bringSubviewToFront(self) // 항상 맨위에 올라오도록
        self.snp.makeConstraints {
            $0.top.equalTo(superview).offset(80)
            $0.leading.equalTo(superview.safeAreaLayoutGuide).offset(10)
            $0.trailing.equalTo(superview.safeAreaLayoutGuide).offset(-10)
            $0.height.equalTo(60)
        }
    }

ViewController.swift 파일 viewDidLoad에서 이것을 호출한다

override func viewDidLoad() {
        super.viewDidLoad()

        
        searchMapView.setupConstraints(in: view)
        searchMapView.delegate = self
            
    }

다음 문제

시각적으로는 서치바가 생겼지만 입력상태 활성화나 버튼이 눌리지않고 아무 반응이 없는 상황.
그러나 top으로 부터 위치를 많이 내려주면 활성화가 된다. 즉 저 위치에 무언가 올라가있다는 의심을 해볼 수 있다.
hierachy에서 레이어가 겹쳐올라오는지 확인해보았다.

서치바 위에 무언가 빈 레이어가 올라가있는데 정체가 뭔지 찾아들어가보면
(해당 레이어에 오른쪽클릭 Reveal In Debug Navigator하면 왼쪽에 구조를 띄워준다)

((_UINavigationBarContentView *)0x1046140c0)라고 나오는 걸 볼 수 있다. 네비게이션이 자동 생성되어 가리고 있는 것.

그러나 아무도 네비게이션 상단을 생성한 적이 없는데 왜 네비게이션이 생성되었는지 찾아보았다.

SceneDelate파일에 루트뷰를 네비게이션으로 설정하고 있었다.
이렇게 되면 자동으로 보이지는 않지만 상단 네비게이션 레이어가 생성되게 된다. 이것을 그냥 뷰이름으로 바꿔야한다.

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 }
        let window = UIWindow(windowScene: windowScene)
        
        
        window.rootViewController = MainTabbarController() // 뷰컨트롤러 이름만
        window.makeKeyAndVisible()
        
        self.window = window
        
        // 라이트모드만 지원
        self.window?.overrideUserInterfaceStyle = .light
    }

입력이 활성화되고 버튼도 눌리게 해결되었다.


다른 방법은 서치바가 들어있는 뷰를 강제로 맨 위에 올려줄 수도 있다.

bringSubviewToFront

//해당 UI를 MapViewController에서 불러올 때의 자리를 지정
    func setupConstraints(in superview: UIView) {
        superview.addSubview(self)
        superview.bringSubviewToFront(self) // 항상 맨위에 올라오도록
        self.snp.makeConstraints {
            $0.top.equalTo(superview).offset(70)
            $0.leading.equalTo(superview.safeAreaLayoutGuide).offset(20)
            $0.trailing.equalTo(superview.safeAreaLayoutGuide).offset(-20)
            $0.height.equalTo(60)
        }
    }
profile
오늘 배운걸 까먹었을 미래의 나에게..⭐️
post-custom-banner

0개의 댓글