Closed Phangg closed 6 months ago
MyPage 에서 툴바 관련 코드를 삭제하고 코드를 실행해도 안됨 Login 쪽 툴바 코드를 삭제하고 해도 안됨
**** 화면을 못그림 / Setting 에서 onAppear 에 print 는 찍힘
**** 네비게이션 스택에는 쌓임.. UI 만 그려지지가 않음 / 그래서 authViewModel 의 상태변수들 찍어봤는데, 잘 변경되어있음..
*** Assertion failure in -[SwiftUI.UIKitNavigationBar layoutSubviews], UINavigationBar.m:3856
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Layout requested for visible navigation bar, <SwiftUI.UIKitNavigationBar: 0x108484070; baseClass = UINavigationBar; frame = (0 53.6667; 393 44); opaque = NO; autoresize = W; layer = <CALayer: 0x600000370da0>> delegate=0x10a0d0000, when the top item belongs to a different navigation bar. topItem = <UINavigationItem: 0x10805b840> style=navigator leadingItemGroups=0x600000deec10 leftItemsSupplementBackButton trailingItemGroups=0x600000dec780 largeTitleDisplayMode=never, navigation bar = <SwiftUI.UIKitNavigationBar: 0x107f79b80; baseClass = UINavigationBar; frame = (0 53.6667; 393 44); opaque = NO; autoresize = W; layer = <CALayer: 0x60000039e800>> delegate=0x109925c00, possibly from a client attempt to nest wrapped navigation controllers.'
*** First throw call stack:
처음에는 MyPageView 에서만 루트 뷰에서도 toolbar 를 사용하는 부분 + 이전에 MyPage 에서 화면 이동시 뷰가 아래로 일부분 내려가는 문제를 겪었던 부분을 통해 아, toolbar 문제일 것 같다
고 생각했다.
-> toolbar 를 MyPage 에서 지우고, toolbar 로 이동하던 화면들의 임시 버튼을 만들어서 테스트 했지만 오류는 사라지지 않았다.
Snapshotting a view (0x12a70ed70, _UIButtonBarStackView) that is not in a visible window requires afterScreenUpdates:YES. 이런 에러를 만나기도 했으니깐.. toolbar 일 거라 생각했지만..
그 이후에는 뷰가 그려지지 않는 것에 대한 문제로 생각.
따라서 일단은 이동할 수 있는 뷰와 각 루트뷰에 네비게이션 스택에서 사용하던 Path 를 onAppear 에 찍어봤음.
화면은 이동이 되고 있었다.. 그러면 데이터도..?
데이터도 엉키지 않고 문제가 없었다..
하지만 끝내 의심을 지우지 못하고, @EnvironmentObject
를 @ObservedObject
로 수정해서 다시 테스트
역시나 네비게이션에는 문제가 없었다.
그 외에도 많은 횟수의 테스트를 거치면서 알게 된 것들이 많이 있었다.
앱의 최상단.. 그리고 처음부터 다시 코드를 보던 도중에, 뭔가 하나 스쳐 지나갔다.
앱의 가장 첫 화면.. Main 과 모든 탭을 관리하는 TabView 를 다시 보던 도중 코드를 발견
@ViewBuilder
private func tabItemView(viewType: ViewType) -> some View {
switch viewType {
case .main:
MainView()
case .drinkInfo:
DrinkInfoView()
case .posts:
PostsView()
case .liked:
if authViewModel.signInStatus {
LikedView()
} else {
EmptyView()
}
case .myPage:
MyPageView()
}
}
맞아.. 우리는 로그인 안되어있을 때, 그냥 저렇게 LikedView 를 의도적으로 가리고 있었다.
하지만, 이 뷰를 불러서 사용하는 부분에서는 ViewType 을 다 돌고 있으니.. tag 의 id 가 엉키고 있는건 아닐까? 그래서.. 그래서 그런걸까? 하는 의심이 들었고, 코드를 수정하게 되었다.
그래서 나는 LikedView 내부에서 authViewModel.signInStatus 에 분기를 두고 뷰를 그려주었다.
그 결괴.. 해결!!!
Snapshotting a view (0x12a70ed70, _UIButtonBarStackView) that is not in a visible window requires afterScreenUpdates:YES.
UIButtonBarStackView
라는 키워드로 봐서는 Toolbar 의 문제로 파악이 된다.앱에서 사용하는 TabView 중에 MyPageView 만, toolbar 를 사용 중. MyPageView 에서 이동하는 View 는 모두 toolbar 를 사용 중. LoginView 도 toolbar 를 사용 중.
하지만! MyPage 에서 Login 했을 때만, 그 이후의 네비게이션을 통한 화면이동에 에러가 있다는 것은.. MyPage -> Login 의 이동에서 뭔가 toolbar 의 영역에대한 문제가 있는 것이 아닐까-
현재 4월 13일까지 다양한 테스트를 진행중이지만, 아직 해결하지 못함.