작업역할
맵 뷰를 슈퍼뷰로 로드되도록하고 다른 팀원 분이 서치바를 구현하는 역할.
각 자 작업을 하고 합쳤는데 서치바가 사라짐
아무리 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)
}
}