Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SWIFT
- 리펙토링
- 리펙터링
- RxCocoa
- tableView
- Refactoring
- swiftUI
- 애니메이션
- Clean Code
- Xcode
- clean architecture
- rxswift
- Human interface guide
- 스위프트
- 클린 코드
- HIG
- ios
- ribs
- uiscrollview
- combine
- UITextView
- map
- swift documentation
- Protocol
- Observable
- MVVM
- collectionview
- UICollectionView
- 리팩토링
- uitableview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - SwiftUI] 튜토리얼 - 6. 네비게이션 (NavigationView, navigationTitle, NavigationLink, .navigationBarTitleDisplayMode) 본문
iOS 튜토리얼 (SwiftUI)
[iOS - SwiftUI] 튜토리얼 - 6. 네비게이션 (NavigationView, navigationTitle, NavigationLink, .navigationBarTitleDisplayMode)
jake-kim 2022. 7. 8. 23:34
네비게이션 사용 방법
- NavigationView를 단순히 추가
struct LandmarkList: View {
var body: some View {
NavigationView { // <-
List(landmarks, id: \.id) { landmark in
LandmarkRow(landmark: landmark)
}
}
}
}
- 추가된 NavigationView의 영역 확인
- List위에 Navigation의 Title 추가
- 리스트에 navigationTitle()로 추가
struct LandmarkList: View {
var body: some View {
NavigationView {
List(landmarks, id: \.id) { landmark in
LandmarkRow(landmark: landmark)
}
.navigationTitle("Landmarks") // <-
}
}
}
(navigationTitle을 사용하면 아래처럼 자연스럽게 스크롤하면 타이틀이 위로 이동)
- 셀을 선택하면 그와 연관된 페이지가 뜨도록 Navigation 설정
- NavigationLink 사용
- 클로저 2개를 삽입
- 첫번째 클로저에는 해당 셀을 탭했을때 이동할 화면
- 두번째 클로저에는 (label:) Rows 그대로 입력
struct LandmarkList: View {
var body: some View {
NavigationView {
List(landmarks, id: \.id) { landmark in
NavigationLink { // <-
LandmarkDetail(landmark: landmark)
} label: {
LandmarkRow(landmark: landmark)
}
}
.navigationTitle("Landmarks")
}
}
}
- 등장하는 화면에 NavigationTitle을 적용하고 싶은 경우, 등장할 페이지에 navigationTitle을 사용
struct LandmarkDetail: View {
var landmark: Landmark
var body: some View {
ScrollView {
MapView(coordinate: landmark.locationCoordinate)
.ignoresSafeArea(edges: .top)
.frame(height: 300)
...
}
.navigationTitle(landmark.name) // <-
}
}
- 네비게이션 타이틀을 위쪽 중앙으로 배치하고 싶은 경우, navigationBarTitleDisplayMode(.inline) 사용
struct LandmarkDetail: View {
var landmark: Landmark
var body: some View {
ScrollView {
MapView(coordinate: landmark.locationCoordinate)
.ignoresSafeArea(edges: .top)
.frame(height: 300)
...
}
.navigationTitle(landmark.name)
.navigationBarTitleDisplayMode(.inline) // <-
}
}
- 실행하기위해서 다시 빌드하지 않아도, preview에서 바로 확인이 가능
- preview에서 재생버튼 클릭하고 그대로 사용 가능
Preview - 디바이스 설정 방법
- 일반적인 preview
struct LandmarkList_Previews: PreviewProvider {
static var previews: some View {
LandmarkList()
}
}
- previewDevice를 사용하면 디바이스 설정이 가능
struct LandmarkList_Previews: PreviewProvider {
static var previews: some View {
LandmarkList()
.previewDevice(PreviewDevice(rawValue: "iPhone SE (2nd generation)")) // <-
}
}
- ForEach를 사용하여 여러개의 디바이스를 동시에 확인 가능
struct LandmarkList_Previews: PreviewProvider {
static var previews: some View {
// ForEach([], id:) 사용
ForEach(["iPhone SE (2nd generation)", "iPhone XS Max"], id: \.self) { deviceName in
LandmarkList()
.previewDevice(PreviewDevice(rawValue: deviceName))
}
}
}
* 참고
https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation
'iOS 튜토리얼 (SwiftUI)' 카테고리의 다른 글
Comments