SwiftUI MacOS列表行删除填充

时间:2020-03-17 14:13:31

标签: swift macos swiftui

我试图在Mac OS的SwiftUI的ListView中显示一行。 但是,我的问题是该行周围包含填充。.我想将其拉伸到ListView的边界。

Apple在其示例中使用.listRowInsets(EdgeInsets()) ..但是仅在iOS上显示。对我来说,它不适用于MacOS。

What is a smart pointer and when should I use one?

我的行有一个红色边框以可视化该问题,我希望将其一直拉到列表行的边界,因此填充整个蓝色行。 在MacOS中可以吗?

谢谢。

2 个答案:

答案 0 :(得分:9)

目前,我发现只有解决方法(.listRowInsets应该确实可以完成这项工作,因此值得向Apple提交反馈):

demo

struct TestListRow: View {
    var body: some View {
        List {
            ForEach (0..<3) { i in
                HStack {
                    Text("Test row \(i)").font(.largeTitle)
                    Spacer()
                }
            }
            .listRowBackground(Color.green)
            .border(Color.red)
            .padding(.horizontal, -8)   // << workaround !!
        }.environment(\.defaultMinListRowHeight, 40)
        .border(Color.yellow)
    }
}

答案 1 :(得分:0)

我在行尾添加了这段代码,填充缩小了!!!

    Spacer()
    Text(" ")
    .padding()

示例代码

import SwiftUI


struct testViews1: View {
    var body: some View {
        List {
            ForEach (0..<3) { i in
                HStack {
                    Text("row \(i)")
                    Spacer()
                }
                .background(Color.red)
                .frame(height: 30)  
            }
        }
    }
}


struct testViews2: View {
    var body: some View {
        List {
            ForEach (0..<3) { i in
                HStack {
                    Text("row \(i)")
                    Spacer()
                    Text(" ")
                        .padding()   
                }
                .background(Color.red)
                .frame(height: 30)
                
            }
        }
    }
}

struct testViews_Previews: PreviewProvider {
    static var previews: some View {
        testViews1()
            .frame(height: 150)
        testViews2()
            .frame(height: 150)

    }
}

输出 enter image description here

适用于 SwiftUI 1。