0

我有一个包含棋盘的游戏视图,我在 VStack 中有几个部分,最后 2 个 HStack 是一些“按钮”,然后是游戏的一排瓷砖。

        VStack(spacing: 5) {  
        HStack {}
        HStack {}
        ......
        ......
        HStack {

                ResetButton {
                    self.returnLetters()
                }
                NewLine {
                    self.newLine()
                }
                CalcButton {
                    self.calcButton()
                }
                StartButton {
                                   self.startButton()
                               }
                }

        HStack {
            ForEach(0..<7) { number in
                Letter(text: self.tray[number], index: number, onChanged: self.letterMoved, onEnded: self.letterDropped)
                            }
                }

这可以很好地设置屏幕但是我最好在游戏后期才显示开始和计算按钮,或者确实用开始和计算替换重置和换行按钮。

看起来 现在看起来

理想情况下我会在游戏后期拥有什么 所需外观

最后一次改成这个 终局画面

有没有办法不显示堆栈中的项目或稍后将项目添加到堆栈中?

谢谢

4

2 回答 2

0

这是一个模式,引入对应的 @State 变量和所需的初始状态值。以后可以随时在视图中的某个位置更改状态,并且视图将自动更新,显示有条件的依赖按钮:

  @State private var newLineVisible = false // initially invisible
  ...
  var body: some View {
        ...
        HStack {

                ResetButton {
                    self.returnLetters()
                }
                if self.newLineVisible { // << include conditionally
                   NewLine {
                       self.newLine()
                   }
                }
                CalcButton {
                    self.calcButton()
                }
于 2020-02-03T14:49:36.663 回答
0

使用 @State 布尔变量来定义按钮是否应该显示,当您更改它们的值时,视图将被刷新。

@State var isResetVisible = true
...
if isResetVisible {
    ResetButton {
        self.returnLetters()
    }
}

然后你在某处将它设置为假,它会隐藏

于 2020-02-03T14:50:23.563 回答