Viewが重なる
コードからだけだとなかなか伝えるのが難しい気がしました。
画面のスクリーンショットも添付すると良いかもしれませんね。
ナビゲーションリンクで遷移すると、
ナビゲーションのバーが上に2つ(2行?)表示されてしまうことかなと思いましたので、
その点で書いてみます。
Section 7 Pass Data into Child Views
https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation#Pass-Data-into-Child-Views
Step 7
Step 8
NavigationViewとNavigationLinkの中に記述する遷移先のビューの記述について確認してみると良いと思います。
NavigationViewは親ビューと子ビューでどのように記述されているか、違いはわかりますでしょうか?
private let list1 = [SampleStruct(), ~ ]struct SampleStruct : View, Identifiable { ~ }
この使い方はあまりSwiftUIっぽくないかなと思いました。
ビューの型はプロパティに定義しない方が良いと思いました。
データをプロパティに定義して、それをビューに渡す感じにするとSwiftUIっぽいと思いました。
次のような感じです。
swift
1import SwiftUI2import CoreData3 4struct ContentView: View {5 @Environment(\.managedObjectContext) private var viewContext 6 @FetchRequest(7 sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)],8 animation: .default)9 private var items: FetchedResults<Item>10 // --- SectionStruct,ContentStructはビュー(Viewプロトコルを実装したもの)ではありません。11 private let list2 = [12 SectionStruct(sectionTitle: "A", content: [13 ContentStruct(systemNameText: "pin", folderRowName: "a"),14 ]),15 SectionStruct(sectionTitle: "B", content: [16 ContentStruct(systemNameText: "pin", folderRowName: "a"),17 ]),18 SectionStruct(sectionTitle: "C", content: [19 ContentStruct(systemNameText: "pin", folderRowName: "a"),20 ]),21 ]22 var body: some View {23 NavigationView {24 List {25 ForEach(list2) { item in26 Section(item.sectionTitle) {27 ForEach(item.content) { item2 in28 NavigationLink {29 ArrayView()30 } label: {31 // データをビュー(Viewプロトコルを実装したもの)に渡して表示します。32 FolderRow(33 systemNameText: item2.systemNameText,34 folderRowName: item2.folderRowName)35 }36 }37 }38 }39 }40 .toolbar {41 ToolbarItem(placement: .navigationBarTrailing) {42 EditButton()43 }44 }45 .navigationTitle("A")46 }47 }48}49 50// --- セクションを含めたリスト1つ分の構造体です。ビュー(Viewプロトコルを実装したもの)ではありません。51struct SectionStruct: Identifiable {52 let id = UUID()53 let sectionTitle: String54 let content: [ContentStruct]55}56 57// --- リスト1つ分の構造体です。ビュー(Viewプロトコルを実装したもの)ではありません。58struct ContentStruct: Identifiable {59 let id = UUID()60 let systemNameText: String61 let folderRowName: String62}63 64// --- ビュー(Viewプロトコルを実装したもの)の構造体です。65struct FolderRow: View {66 let systemNameText: String67 let folderRowName: String68 var body: some View {69 HStack{70 Image(systemName: systemNameText)71 Text(folderRowName)72 Text("\(systemNameText.count)")73 }74 }75}76 77// 省略
一つ前の質問の、3つ目の回答にコメントも追記しておきましたので
見ておいてもらえるとありがたいです。

0 コメント