반응형
SafeArea 적용 방법
SwiftUI
코드를 작성하면서 베젤이 없는 기종 (iPhone X
이후 기종)과 베젤이 있는 기종(iPhone 6
/ 7
/ 8
...) 모두에 .edgesIgnoringSafeArea()
를 적용한 frame
을 사용하면 베젤이 있는 기종과 없는 기종의 화면이 달라지게 됩니다. 이럴 때에는
"iPhone 12에는 SafeArea를 적용시키고, iPhone SE에는 적용하지마!"
라고 코드를 작성해줘야 합니다.
SwiftUI
에는 아직 이것을 지원하지 않기때문에 UIKit
을 사용해야 합니다.
// bottom 0의 뜻은 베젤이 있는 기종을 뜻함
UIApplication.shared.windows.first?.safeAreaInsets.bottom == 0
이제 위 코드를 frame
과 offset
등에 적용해보겠습니다.
//베젤이 있는 기종이라면 height 0 이고 베젤이 없는 기종은 height 20 으로 설정
.frame(height: UIApplication.shared.windows.first?.safeAreaInsets.bottom == 0 ? 0 : 20)
//베젤이 있는 기종이라면 Y축이 15 이고 베젤이 없는 기종은 Y축을 0 으로 설정
.offset(y: UIApplication.shared.windows.first?.safeAreaInsets.bottom == 0 ? 15 : 0)
//베젤이 있는 기종이면 패딩 12, 아니라면 0
.padding(.bottom, UIApplication.shared.windows.first?.safeAreaInsets.bottom == 0 ? 15 : 0)
Extension을 만들어서 사용
Extension
으로 따로 만들어서 유용하게 사용 할 수 도 있습니다.
// extending view to get saferarea...
extension View{
func getSafeArea()->UIEdgeInsets{
return UIApplication.shared.windows.first?.safeAreaInsets ?? UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
}
그리고 호출은 아래와 같이 하면 됩니다.
//getSafeArea의 bottom이 0 즉, 베젤이 있으면 오른쪽 패딩 100 그게아니면 0
.padding(.trailing,getSafeArea().bottom == 0 ? 100 : 0)
읽어주셔서 감사합니다🤟
이 글도 읽어보세요
[SwiftUI 기초/Others] - SwiftUI : 삼항 연산자 / IF
[SwiftUI 기초/View layout] - SwiftUI : HStack / Spacer / minLength / Frame
'USEFUL CODE' 카테고리의 다른 글
Swift : 번들에 있는 sound 파일 재생 함수 (0) | 2021.07.29 |
---|---|
(CODE) SwiftUI 컬러 익스텐션 만들기 - 헥스코드활용 (0) | 2021.05.08 |
(CODE) 자동으로 두 줄로 문장을 나눠주는 메서드 (0) | 2021.03.31 |
(CODE) DateFormatter - 한국날짜 형식으로 (1) | 2021.03.23 |
SwiftUI: 탭하여 키보드 숨기는방법 - hideKeyboard() (1) | 2021.03.22 |