稍后使 HStack 中的项目可见/不可见

Making items in HStack visible / invisible later

我有一个带有棋盘的游戏视图,我在 VStack 中有几个部分,最后 2 个 HStack 是一些 'buttons',然后是游戏的一排图块。

        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)
                            }
                }

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

看起来

理想情况下我会在游戏后期拥有

最后一次改成这个

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

谢谢

这里有一个模式,引入相应的@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()
                }

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

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

然后你在某处设置为false,它就会隐藏