본문 바로가기
PROGRAMMING CODE/SWIFT

[Swift] KakaoMap 리사이징 공부 + 디바이스 화면잘림, black screen 버그 (삽질 일기)

by daye_ 2024. 2. 3.

 

 

맵뷰 공부를 위해 다음과 같이 단일 프로젝트로 따로 코드를 짰고,

팀 프로젝트 코드에 맵뷰를 추가하는 와중에 화면 크기가 제대로 나오지 않아서 삽질 지대루함 ㅠ0ㅠ~~~

 

(결국 맵뷰 문제가 아닌 디바이스 버그였던것 ㅜㅋㅜㅋ)

 

struct MapView: View {
...
    
    var body: some View {
		KakaoMapView(draw: $draw, userLatitude: $userLatitude, userLongitude: $userLongitude, isShowingSheet: $isShowingSheet)
            .onAppear {
                Task {
                    await startTask()
                    self.draw = true
                }
            }
            .onDisappear(perform: {
                self.draw = false
            })
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .edgesIgnoringSafeArea(.all)
         }
      }
}

 

 

왼: 전, 오른: 현

 

원래 공부 전용 단일 프로젝트로 만들었을때는 왼쪽과 같이 나왔는데

팀프로젝트로 코드를 옮긴 후 위, 아래가 좁게 나오는것이다..

 

왜일까..?

 

 

 

프리뷰도 작은 크기가 아닌 기존처럼 나오고, 뷰의 구조를 살펴봐도 왜 작아진지 알 수 없음..

 

그래서 KMViewContainer에 프레임을 다시 지정해주기도 해보고 bounds,

NavigationStack문제는 아닌지, 모달 문제는 아닌지 다 살펴봤지만 아니었다.

 

mapView의 사이즈 관련된 부분은 containerDidResized(_size: CGSize)  이 부분을 제외하고는 딱히 없는것같아서

호출 시점을 체크해보니, Poi생성 후 자동 호출되었다.

 

 

 

 

 

일단 모르겠어서 공홈에 들어가 다시 문서를 살피는데 이런 주의사항이 있었다.,,

 

child View가 뭔지 알아내야겠는데,,, 

KMViewContainer클릭 후 Jump to Definition해서 SDK파일을 열어보니 다음과 같다

/// MapContainer
/// UIView를 상속받아 지도를 표시하는 클래스.
@interface KMViewContainer : UIView{
    
}

#pragma mark - Metal usage
/// if true, render using OpenGL. default NO.
+ (void)setUseGL:(BOOL)useGL;
/// return useGL value.
+ (BOOL)useGL;

#pragma mark - delegate

/// View touchEvent Delegate.
- (void)setDelegate:(id<K3fMapContainerDelegate> _Nullable)delegate;

#pragma mark - Properties
/// RenderMode에 따라 실제 지도가 그려지는 childView.
@property (nonatomic, retain) UIView * _Nullable renderView;
/// RenderMode. setUseGL이 true 일경우 GL. 아닐경우 실행환경에 따라  GL/Metal 이 자동으로 선택됨.
@property (atomic, assign) RenderMode renderMode;
/// 기기의 display가 ProMotion 을 지원하는지 여부
@property (nonatomic, readonly) BOOL proMotionDisplay;
@end

#endif /* K3fMapContainer_h */

여튼 결론적으로 auto resize mask를 이용해야 한다는 것이다.

그래서 makeUIView 부분에  view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 를 추가해줬지만 여전히 안됨 ㅋ

 

 

 

 

 

포기하고 있다가 문뜩 맵뷰 문제가 아니라면?!!?!? 하면서 기본 Text("Hello World!")만 있는 뷰를 띄워봤는데

위 아래가 잘려서 똑같이 나오는거임!!!!!!!!!!! ( °̥̥̥̥̥̥̥̥◡͐°̥̥̥̥̥̥̥̥) 난 바보다....

 

맵뷰 문제인줄 알았는데 아니었다 ^^,,

 

 

 

 

 

팀 프로젝트 폴더는 tuist로 셋팅했는데,

infoPlist에 Launch screen interfadce file base name을 설정해주면 해결된닷 ,,,,

ㅎ 실화냐

 

 

 

 

 

그래됴 위 아래 막혀있다가 뚫리니까 속이 다 시원하다 

ദ്ദി(☆⸝⸝ʚ̴̶̷̆ ᴗ ʚ̴̶̷̆⸝⸝)