У меня есть представление BugSplitView
, которое работает само по себе, но вызывает ошибку
предусловия: атрибут не смог установить начальное значение
при переходе вили превью или симулятор.
Вид имеет верхнюю часть (Цвет) и нижнюю часть (Цвет), разделенные горизонтальной панелью кнопок и расположенные с использованием GeometeryReader и состояния split
. Когда это пункт назначения NavigationButton, он не отображается должным образом в окне предварительного просмотра и сообщает утверждение выше при запуске в симуляторе. Удалите BugButtonBar
, и это работает. Получил меня в тупик! Справка.
import SwiftUI
struct BugSplitView: View {
@State var split : CGFloat = 0.75
var buttons : [BugButtonBar.Info]{
[BugButtonBar.Info(title: "title", imageName: "text.insert"){}]
}
var body: some View {
GeometryReader{ g in
VStack(spacing: 0){
Color.gray
.frame(width: g.size.width, height: (g.size.height) * self.split)
VStack{
BugButtonBar(infos: self.buttons)
Color(white: 0.3)
}
.frame(height: (g.size.height) * (1 - self.split))
}
}.edgesIgnoringSafeArea(.all)
}
}
struct BugButtonBar : View{
struct Info : Identifiable {
var id = UUID()
var title : String
var imageName : String
var action: () -> Void
}
var infos : [Info]
func color() -> Color{
Color.black
}
var body: some View {
HStack(){
Spacer()
ForEach(self.infos){ info in
Button(action: info.action){
Text(info.title)
}
Spacer()
}
}
}
}
struct ShowBugView : View{
var body : some View{
NavigationView {
NavigationLink(destination: BugSplitView()){
Text("Show Bug")
}
}
}
}
struct BugSplitView_Previews: PreviewProvider {
static var previews: some View {
Group{
BugSplitView()
ShowBugView()
}
}
}