Неверное поведение прокрутки при использовании списка в WatchOS - PullRequest
0 голосов
/ 21 октября 2019

Поведение # 1: Я пытаюсь получить текст, прежде чем у меня будет список элементов, и все будет последовательно прокручиваться. Я пытался изменить код во многих аспектах, и в результате я получил неправильное поведение. Вот код для поведения_1:

struct Thing: Hashable {
    var name: String
    var number: Int
}
struct SummaryView: View {
    var things = [Thing(name: "Paul", number: 42),Thing(name: "Jackie", number: 41),Thing(name: "James", number: 49),Thing(name: "Paola", number: 22)]
    var body: some View {
        VStack(alignment: .leading){
            Text("Text 1")
            Text("Text 2")
            Text("Text 3")
            Text("Text 4")
            List{
                ForEach(self.things, id: \.self){ thing in
                    VStack(alignment: .leading){
                        Text(thing.name)
                        Text("\(thing.number) Years")
                            .foregroundColor(Color.blue)
                    }
                    .padding()
                    .frame(minWidth: 0, maxWidth: .infinity, alignment: Alignment.leading)
                }
            }
            Spacer()
            NavigationLink(destination: Text("HI")){
                Text("Finished")
            }

        }.edgesIgnoringSafeArea(.bottom)
    }
}

Это позволяет создать небольшой раздел экрана со списком, который можно прокручивать: это означает, что я могу видеть только около 1 элемента списка за рази я могу только прокрутить этот раздел представления (элементы списка). enter image description here

Поведение № 2: Я также попытался поместитьПеречислите внутри ScrollView, это указывает на поведение_2, в котором есть две различные прокручиваемые области: первая - это область с текстом («Текст 1» и т. Д.) И контейнер / представление списка (имеется в виду Iне может прокручивать отдельные элементы), вторая область прокрутки является фактическими элементами в списке, но как только я достигаю верхнего элемента, секция прокрутки не переходит к тексту и т. д .:

import SwiftUI

struct Thing: Hashable {
    var name: String
    var number: Int
}
struct SummaryView: View {
    var things = [Thing(name: "Paul", number: 42),Thing(name: "Jackie", number: 41),Thing(name: "James", number: 49),Thing(name: "Paola", number: 22)]
    var body: some View {
        ScrollView{
            VStack(alignment: .leading){
                    Text("Text 1")
                    Text("Text 2")
                    Text("Text 3")
                    Text("Text 4")
                    List{
                        ForEach(self.things, id: \.self){ thing in
                            VStack(alignment: .leading){
                                Text(thing.name)
                                Text("\(thing.number) Years")
                                    .foregroundColor(Color.blue)
                                }
                            .padding()
                            .frame(minWidth: 0, maxWidth: .infinity, alignment: Alignment.leading)
                        }
                    }.aspectRatio(contentMode: .fit)
                Spacer()
                NavigationLink(destination: Text("HI")){
                    Text("Finished")
                }

            }

        }.edgesIgnoringSafeArea(.bottom)
    }
}

У меня естьтакже пытался переключить ScrollView с помощью VStack, чтобы получить что-то вроде этого:

VStack(alignment: .leading){
    ScrollView {
           .
           .
           .
    }
}

И это ведет себя как поведение_2:

Behavior #2 Image

Любые предложения о том, как я могу получитьЖелаемое поведение (когда вы прокручиваете тексты, вы затем прокручиваете элементы списка (то есть, чем меньше текста, тем больше прокручиваете), пока не достигнете нижней части списка и т. д.)?

OfКонечно, я не реализовал новое представление «Список», а затем использовал для каждого цикла итерацию по элементам

1 Ответ

0 голосов
/ 22 октября 2019

Если вы поместите 4 Text с в List, он будет прокручиваться вместе с ним. Spacer также не требуется:

var body: some View {
    VStack(alignment: .leading) {
        List {
            VStack {
                Text("Text 1")
                Text("Text 2")
                Text("Text 3")
                Text("Text 4")
            }   .padding()
            ForEach(self.things, id: \.self){ thing in
                VStack(alignment: .leading){
                    Text(thing.name)
                    Text("\(thing.number) Years")
                        .foregroundColor(Color.blue)
                }   .padding()
            }
        }
        NavigationLink(destination: Text("HI")){
            Text("Finished")
        }

    }.edgesIgnoringSafeArea(.bottom)
}
...