使用SwiftUI在macOS中设置SidebarView的宽度

时间:2020-04-30 13:01:00

标签: macos swiftui

我正在使用NavigationView在Mac应用程序的窗口中显示SidebarView和DetailView:

import SwiftUI

private let fruits = ["? Apple", "? Coconut", "? Mango", "? Kiwi"]

struct SidebarView: View {

    @Binding var selectedFruit: String?

    var body: some View {
        List(fruits, id: \.self, selection: $selectedFruit) { fruit in
            Text("\(fruit)")
        }
        .listStyle(SidebarListStyle())
        .frame(minWidth: 180, idealWidth: 200, maxWidth: 300)
    }
}

struct DetailView: View {

    @Binding var fruit: String?

    var body: some View {
        Text("\(fruit ?? "Default Fruit")")
            .font(.headline)
            .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

struct ContentView: View {

    @State private var selectedFruit: String?

    var body: some View {
        NavigationView {
            SidebarView(selectedFruit: $selectedFruit)
            DetailView(fruit: $selectedFruit)
        }
        .frame(width: 500, height: 400)
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

可以通过在窗口中向左或向右拖动中心分隔线来调整SidebarView的宽度。我想为边栏定义一个初始宽度200,最小宽度为180,最大宽度为300。我通过设置List的框架来尝试此操作,该列表的确设置了最大宽度,但是边栏仍然可以完全崩溃。另外,侧边栏的初始宽度似乎由minWidth而非idealWidth定义。

1 个答案:

答案 0 :(得分:0)

对于发现此问题并想知道如何在macOS中设置边栏的maxWidth的任何人,您实际上没有。如果这样做,视图将停止增长,然后被捕获在侧边栏的中间,该边栏将继续扩展。

花了我一分钟时间才弄清楚这一点,但是您要做的是设置另一个视图(详细信息视图)的minWidth。侧边栏将一直增长,直到不能增长为止。您会注意到,即使Finder的侧边栏也会不断增长,直到达到细节的minWidth为止。