개발/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)
}