Создание 3-х панельного интерфейса в swiftUI с использованием 2 HSplitViews - PullRequest
0 голосов
/ 22 марта 2020

Это для 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 и несколько других вещей, но проблема остается. Любая помощь с этим будет высоко ценится.

1 Ответ

2 голосов
/ 22 марта 2020

Ну, я буду. После нескольких недель борьбы с этим и спустя час после того, как я задал вопрос, я решил его решить! Просто установите layoutPriority второго HSplitView равным 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...