[iOS SwiftUI] NavigationView에서 NavigationLink(destination:isActive:label:) 사용시 경고

hyoooooooooopark·2024년 1월 1일
0

iOS

목록 보기
1/3

상황

A뷰에서 NavigationView로 B뷰를 보여주고
B뷰에서 sheet로 C뷰 보여주는 상황에서
C뷰에서 조건을 만족하면 A뷰로 돌아가고 싶었다.

A뷰에서 NavigationView안에 NavigationLink(destination:isActive:label:)를 사용했는데

'init(destination:isActive:label:)' was deprecated in iOS 16.0: use NavigationLink(value:label:), or navigationDestination(isPresented:destination:), inside a  NavigationStack or NavigationSplitView

와 같은 경고를 받았다.

해당 내용은 iOS 16.0에서 더 이상 사용하지 않는 다는 경고로
NavigationLink(value:label:) 또는 navigationDestination(isPresented:destination:) 와 같은 다른 선택지를 준다.

이 내용은
애플 개발자 문서 - navigationlink/init(destination:isactive:label:)
에서도 확인 할 수 있다.

해결과정

타고난 반골 기질로 제시되는 선택지가 아닌 custom navigationview를 제작해봤는데
기본 제공하는 NavigationView의 화면 전환 효과를 그대로 재현하는데에 어려움을 겪었다.
(추후에 똑같이 재현하는 코드는 찾아볼 예정)

결국 선택지 중 하나를 고르려고 구글링을 했는데
NavigationStack NavigationLink(value:label:) 를 사용하는게 정석적인 해결 법이라고 생각되었다.
하지만 이 방법은 애플 개발자 문서 - navigationstack를 확인해 보면
오히려 iOS 16 이후부터 사용이 가능하다고 한다... 흠...

커스텀 뷰는 마음에 안들고[이유 1], iOS 16 이후만 사용할 수 있는 것보단[이유 2]
아직 까지는 경고로 남아있고[이유 3], 시뮬레이터로 확인해 보니 17에서도 잘 작동하기에[이유 4]
기존에 작성했던 NavigationLink(destination:isActive:label:)을 사용하기로 했다. (xcode가 띄우는 경고가 굉장히 찝찝하긴 하지만...)

결론

NavigationLink(destination:isActive:label:)을 쓸지 말지는 아직까지는 선택의 영역이라고 생각된다.
언젠가 NavigationStack NavigationLink(value:label:) 의 사용이 필수가 된다면 코드 수정이 필요하겠지만
아직까지는 NavigationLink(destination:isActive:label:)사용이 더 많은 사용자를 커버할 수 있다고 생각된다.


!!주의!! 본 게시글은 학습을 기록하고, 경험을 공유하는 목적으로 작성되었습니다.
내가 만난 문제와 선택지들, 내가 선택한 해결법을 포스팅하였기 때문에
틀린 부분과 정답이 아닌 것들이 포함되어 있을 수 있습니다.

profile
슈뢰딩거의 개발 : 정답일 수도 아닐 수도 있습니다.

0개의 댓글