SwiftUI ScrollView только прокрутка в одном направлении - PullRequest
1 голос
/ 20 июня 2019

Попытка создать собственный список, используя представление в качестве стиля строки списка (чтобы избавиться от уродливой линии, разделяющей список по умолчанию).

Однако, как только я поместил свои строки ZStack в свитокпредставление прокрутки прокручивается в обоих направлениях, а не только по вертикали.

Вот это contentView:

NavigationView {
            ScrollView{
                VStack(alignment: .leading){
                    ForEach(friends) { friends in
                        NavigationButton(destination: MessageDetailView(friend: friends)) {
                            CustomListItem(friend: friends)
                        }
                    }
                    Spacer()
                }
            }
                .foregroundColor(.black)
                .navigationBarTitle(Text("Messages"))
        }

, а вот customListItem:

Group{
            ZStack {
                RoundedRectangle(cornerRadius: 10)
                    .shadow(radius: 1, y:1)
                    .frame(width: UIScreen.main.bounds.width - 32, height: 75)
                    .foregroundColor(.gray)

                HStack {
                    Image(systemName: "person.crop.circle")
                        .resizable()
                        .frame(width: 50, height: 50)
                    VStack(alignment: .leading) {
                        HStack {
                            Text(friend.name)
                                .font(.headline)
                            Text("\(friend.date, formatter: dateFormatter)")
                        }
                        Text(friend.messagesReceived[0])
                            .font(.subheadline)
                        }       .lineLimit(nil)
                    Spacer()
                    Image(systemName: "chevron.right.circle")
                        .foregroundColor(.black)
                    }.padding(10)
                }.padding([.leading, .trailing])
        }

Isесть ли способ ограничить прокрутку вертикалью или наложить на нее рамку?

Попытка использовать модификатор .frame (...) не работает, как я пробовал.Это приводит к тому, что представление вообще не загружается.

Примеры изображений:

Without ScrollView

With ScrollView wrapping the VStack

Ответы [ 2 ]

6 голосов
/ 20 июня 2019

Этого можно достичь с помощью GeometryReader. Оберните ваш ScrollView в один, а затем установите ширину вашего VStack.

GeometryReader - это очень простой и довольно полезный трюк для SwiftUI:)

Вот как я работал с вашим кодом:

NavigationView {
            GeometryReader { geometry in
                ScrollView {
                    VStack(alignment: .leading){
                        ForEach(self.friends) { friend in
                            NavigationButton(destination: MessageDetailView(friend: friend)) {
                                CustomListItem(friend: friend)
                            }
                        }
                        Spacer()
                    }.frame(width: geometry.size.width)
                }
                    .foregroundColor(.black)
                    .navigationBarTitle(Text("Messages"))
            }
        }
4 голосов
/ 03 июля 2019

Начиная с Xcode 11 beta 3 (11M362v), существует параметр axes при построении ScrollView, который может быть установлен на .horizontal или .vertical

ScrollView(.vertical, showsIndicators: true) { ... }
...