アプリのデザインとレイアウト

UI コントロールを扱う





訳注:以下、必要な場所においては Mac と iPhone 両方のセクションを提供しています。
Mac → セクション 3、iPhone → セクション 103 とします。






    ProfileEditor.swift


  1. import SwiftUI
  2. struct ProfileEditor: View {
  3. @Binding var profile: Profile
  4. var body: some View {
  5. List {
  6. HStack {
  7. Text("Username").bold()
  8. Divider()
  9. TextField("Username", text: $profile.username)
  10. }
  11. }
  12. }
  13. }
  14. struct ProfileEditor_Previews: PreviewProvider {
  15. static var previews: some View {
  16. ProfileEditor(profile: .constant(.default))
  17. }
  18. }


プレビュー その 1


    ProfileHost.swift


  1. import SwiftUI
  2. struct ProfileHost: View {
  3. @Environment(\.editMode) var editMode
  4. @EnvironmentObject var modelData: ModelData
  5. @State private var draftProfile = Profile.default
  6. var body: some View {
  7. VStack(alignment: .leading, spacing: 20) {
  8. HStack {
  9. Spacer()
  10. EditButton()
  11. }
  12. if editMode?.wrappedValue == .inactive {
  13. ProfileSummary(profile: modelData.profile)
  14. } else {
  15. ProfileEditor(profile: $draftProfile)
  16. }
  17. }
  18. .padding()
  19. }
  20. }
  21. struct ProfileHost_Previews: PreviewProvider {
  22. static var previews: some View {
  23. ProfileHost()
  24. .environmentObject(ModelData())
  25. }
  26. }


    ProfileEditor.swift


  1. TextField("Username", text: $profile.username)
  2. }
  3. Toggle(isOn: $profile.prefersNotifications) {
  4. Text("Enable Notifications").bold()
  5. }
  6. }
  7. }


プレビュー その 2


    ProfileEditor.swift


  1. Text("Enable Notifications").bold()
  2. }
  3. VStack(alignment: .leading, spacing: 20) {
  4. Text("Seasonal Photo").bold()
  5. Picker("Seasonal Photo", selection: $profile.seasonalPhoto) {
  6. ForEach(Profile.Season.allCases) { season in
  7. Text(season.rawValue).tag(season)
  8. }
  9. }
  10. .pickerStyle(SegmentedPickerStyle())
  11. }
  12. }
  13. }


プレビュー その 3


    ProfileEditor.swift


  1. import SwiftUI
  2. struct ProfileEditor: View {
  3. @Binding var profile: Profile
  4. var dateRange: ClosedRange<Date> {
  5. let min = Calendar.current.date(byAdding: .year, value: -1, to: profile.goalDate)!
  6. let max = Calendar.current.date(byAdding: .year, value: 1, to: profile.goalDate)!
  7. return min...max
  8. }
  9. var body: some View {
  10. List {
  11. HStack {
  12. Text("Username").bold()
  13. Divider()
  14. TextField("Username", text: $profile.username)
  15. }
  16. Toggle(isOn: $profile.prefersNotifications) {
  17. Text("Enable Notifications").bold()
  18. }
  19. VStack(alignment: .leading, spacing: 20) {
  20. Text("Seasonal Photo").bold()
  21. Picker("Seasonal Photo", selection: $profile.seasonalPhoto) {
  22. ForEach(Profile.Season.allCases) { season in
  23. Text(season.rawValue).tag(season)
  24. }
  25. }
  26. .pickerStyle(SegmentedPickerStyle())
  27. }
  28. DatePicker(selection: $profile.goalDate, in: dateRange, displayedComponents: .date) {
  29. Text("Goal Date").bold()
  30. }
  31. }
  32. }
  33. }
  34. struct ProfileEditor_Previews: PreviewProvider {
  35. static var previews: some View {
  36. ProfileEditor(profile: .constant(.default))
  37. }
  38. }


プレビュー その 4






セクション 1セクション 2
セクション 3セクション 4
セクション 101セクション 102
セクション 103セクション 104






目次
Xcode の新機能

フレームワーク

  • SwiftUI

  • ビューの作成と結合

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    ビルドリストとナビゲーション

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6

    セクション 7

    セクション 8


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    セクション 107

    セクション 108

    ユーザー入力の処理

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    パスとシェイプの描画

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    ビューと移行のアニメーション

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    複雑なインターフェースの構成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    UI コントロールを扱う

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    UIKit とのインターフェース

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    watchOS アプリの作成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    macOS アプリの作成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6

    セクション 7


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    セクション 107