개발/Swift

[Error] navigationbar subview 레이아웃 에러

덤벨로퍼 2024. 8. 20. 12:09
A multiplier of 0 or a nil second item together with a location for the first attribute creates an illegal constraint of a location equal to a constant. Location attributes must be specified in pairs

라는 에러가 발생

해당 에러는 레이아웃을 잡을떄 second view 가 없거나 할떄 일어나는 문제

상황

레이아웃 부분

showMapToolTip.snp.makeConstraints { make in
    make.top.equalTo(30)
    make.trailing.equalTo(-12)
}

해당 view는 네비게이션 바 에 추가된 view이다

view가 아니라 네비게이션바 위치에 있어야 하고 view.addSubview() 를 한 경우

네비게이션 바에 덮혀서 가려질수 있기 때문에 navigationbar.addSubView() 했었음

        navigationController?.navigationBar.addSubview(showMapToolTip)

해당 에러는 계속 나타나지 않고 간헐적으로 운영 환경에서 발생하므로 재현이 불가함

해결

더 안정적으로 add Subview 하여 레이아웃 잡을때 secon view가 없을 가능성을 최소화 함

navigationController?.view 를 활용하여 구현

guard let navigationView = navigationController?.view else { return }
navigationView.addSubview(showMapToolTip)
showMapToolTip.snp.makeConstraints { make in
    make.top.equalTo(navigationView.safeAreaLayoutGuide.snp.top).offset(30)
    make.trailing.equalToSuperview().offset(-12)
}