我需要删除导航视图下方的分隔符,当我设置 .listStyle(.plain) 时会发生这种情况,因为我需要为列表提供手动插入。我也尝试过使用 VStack 嵌入列表,但没有帮助,当在 VStack 中添加文本时,我可以去掉分隔线,但我需要在没有文本的情况下实现这一点。请帮助我实现这一目标。
请找到 SwiftUI 的代码片段:
import SwiftUI
struct ContentView: View {
var apiHandler = APIHandler.shared
@State var users = [User]()
var body: some View {
NavigationView {
List {
//Top Horizontal Layout
ScrollView(.horizontal,showsIndicators: false) {
HStack {
ForEach(users, id: \.id) { user in
HorizontalUserList(user: user)
}
}
}
//Vertical Layout
ForEach(users,id: \.id) { user in
VerticalUserList(user: user)
.listRowInsets(.init(top: 20, leading: 10, bottom: 0, trailing: 0))
}
}
.listStyle(.plain)
.listSectionSeparator(.hidden,edges: .all)
.scrollContentBackground(.hidden)
.navigationTitle("Users")
}
.onAppear(perform: {
apiHandler.getUsers {
users = apiHandler.users
}
})
}
}
struct VerticalUserList: View {
var user : User
@State var image = UIImage()
var body: some View {
HStack{
Image(uiImage: image)
.resizable()
.cornerRadius(30)
.aspectRatio(contentMode: .fit)
.frame(width: 60,height: 60,alignment: .center)
.onAppear(perform: {
guard let url = URL(string: user.avatar) else { return }
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else { return }
guard let image = UIImage(data: data) else { return }
DispatchQueue.main.async {
self.image = image
}
}.resume()
})
Text(user.first_name + "" + user.last_name)
.font(.headline)
.multilineTextAlignment(.leading)
}
}
}
struct HorizontalUserList: View {
var user : User
@State var image = UIImage()
var body: some View {
VStack{
Image(uiImage: image)
.resizable()
.frame(width: 80,height: 80,alignment: .center)
.cornerRadius(40)
.aspectRatio(contentMode: .fit)
.padding(10)
.onAppear(perform: {
guard let url = URL(string: user.avatar) else { return }
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else { return }
guard let image = UIImage(data: data) else { return }
DispatchQueue.main.async {
self.image = image
}
}.resume()
})
Text(user.first_name + "" + user.last_name)
.font(.headline)
.multilineTextAlignment(.leading)
}
}
}
您需要将 .listRowSeparator(.hidden) 放入 List{} 示例:
let contacts = [
"John",
"Alice",
"Bob",
"Foo",
"Bar"
]
var body: some View {
List {
ForEach(contacts, id: \.self) { contact in
Text(contact)
}
.listRowSeparator(.hidden)
}
}