Несколько GeometryReader Вызывает проблему с другим GeometryReader SwiftUI - PullRequest
0 голосов
/ 27 марта 2020

Я использую два стека, и у меня есть UIViewRepresentable, который я хочу поместить в первый стек, но для ширины и высоты я использую GeometryReader, чтобы получить ширину и высоту, чтобы UIViewRepresentable был внутри первый стек Также во втором стеке у меня есть Rectangle, и я также хочу установить размер ширины Rectangle так же, как второй стек, поэтому я снова использовал GeometryReader, и теперь он влияет на размер кадра в UIViewRepresentable, который был в первом стеке.

Я использую iOS 13,4 и Xcode 11,4

Первый вид и первый стек:

struct BAverage: View {
    @State var bAvg = [10.3, 13.4]

    var body: some View {

        VStack(alignment: .leading, spacing: 0) {

            // MARK: Card Header
            HStack {
                Text("B Average")
                    .bold()
                    .font(.headline)
                Spacer()
            }
            .padding([.top, .horizontal])


            // MARK: Chart
            HStack {
                Spacer()
                GeometryReader { p in
                    LineChartSwiftUI(bAvg: self.$bAvg)
                        .frame(width: p.size.width, height: p.size.height)
                }
                VStack {
                    Text("Average".uppercased())
                        .bold()
                        .font(.system(size: 12))
                        .padding(.top, 10)
                    Text(String(self.bAvg.max() ?? 0.0))
                        .padding()                        
                }
                Spacer()
            }

        }
        .background(Color.green)
        .padding(.horizontal)

    }
}

Второй вид и второй стек:

struct CAverage: View {

    @State var valee = 80


    var body: some View {
        VStack(alignment: .leading, spacing: 0) {

            // MARK: Card Header
            HStack {
                Text("CAverage")
                    .bold()
                    .font(.headline)
                Spacer()
            }
            .padding()

            // MARK: Chart and Average Temp
            HStack {
                Spacer()
                Text("0")
                GeometryReader { (proxy) in
                    Rectangle()
                        .foregroundColor(Color("Main"))
                        .frame(width: proxy.size.width, height: 4)
                }
                Text("100")
                VStack {
                    Text("LINE")
                }
                Spacer()
            }

        }
        .background(Color.red)
        .padding(.horizontal)
    }
}

и затем я использую эти два вида в другом представлении:

struct ContentView: View {
    var body: some View {
        NavigationView {

            ScrollView {
                    VStack {
                        BAverage()


                        Spacer()
                    }

            }
                // NavigationView Settings
                .navigationBarTitle("Status", displayMode: .automatic)
                // Accent Color
                .accentColor(Color("Main"))
        }
    }
}

Вы также можете увидеть на изображении ниже: Без установки CAverage () в ContentView: Without putting the CAverage() in ContentView

После установки CAverage () в ContentView: After putting the CAverage() in ContentView

...