【问题标题】:Creating a 3 pane Interface in swiftUI using 2 HSplitViews使用 2 个 HSplitViews 在 swiftUI 中创建一个 3 窗格界面
【发布时间】:2020-07-02 20:55:04
【问题描述】:

这适用于 MacOS。我正在尝试制作一个相当标准的 3 窗格界面,就像您在 Xcode 和其他应用程序中看到的那样,在调整窗口大小时中心视图具有优先权。两个侧视图可调整大小,但在调整窗口大小时应保持相同大小。我有以下示例,它可以满足我的要求,但是当我调整窗口大小时会出现奇怪的调整大小伪影,但只有当我使窗口变小时(实际上只有当它变窄时):

struct ContentView: View {
   var body: some View {
      GeometryReader{geometry in
         HSplitView(){
            Rectangle().foregroundColor(.red).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)//.layoutPriority(0)
            HSplitView(){
                Rectangle().foregroundColor(.black).frame(minWidth:200, idealWidth: geometry.size.width, maxWidth: .infinity).layoutPriority(1)
                Rectangle().foregroundColor(.green).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)
            }
         }.frame(width: geometry.size.width, height: geometry.size.height)
      }
   }
}

当使窗口变窄时,左侧红色矩形似乎优先于中心矩形,导致红色矩形在两个宽度之间翻转时闪烁。我已经尝试了 layoutPriority 和其他一些东西,但问题仍然存在。对此的任何帮助将不胜感激。

【问题讨论】:

    标签: macos swiftui


    【解决方案1】:

    好吧,我会的。在断断续续地挣扎了几个星期之后,在我问了这个问题一个小时后,我似乎解决了这个问题!只需将第二个 HSplitView 的 layoutPriority 设置为 1,并将中心视图也设置为 1。想想就觉得有道理:

    
    struct ContentView: View {
       var body: some View {
          GeometryReader{geometry in
             HSplitView(){
                Rectangle().foregroundColor(.red).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)
                HSplitView(){
                    Rectangle().foregroundColor(.black).layoutPriority(1)
                    Rectangle().foregroundColor(.green).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)
                }.layoutPriority(1)
             }.frame(width: geometry.size.width, height: geometry.size.height)
          }
       }
    }
    

    如此简单。喜欢 SwiftUI!

    【讨论】:

    • 太棒了!只是不要忘记为整个内容视图设置最小宽度,例如:ContentView().frame(minWidth: 500, maxWidth: .infinity, maxHeight: .infinity),否则它将允许缩小到设置视图限制调整窗口大小以下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2018-02-13
    • 2022-01-05
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多