SwiftUI - цвет фона контекстного меню - PullRequest
1 голос
/ 30 апреля 2020

Фон контекстного меню не обновляется

Я пытаюсь обновить цвет фона.

Цвет фона обновляется для просмотра, но не обновляется для контекстного меню

В контекстном меню отображается предыдущий цвет, который был установлен.

Может кто-нибудь помочь мне с этим , заранее спасибо

это код, который я использовал

import SwiftUI

struct ContextMenu: View {
    /*List of items =*/

    @State var bgColor = Color.gray
    var body: some View {

        HStack {
            Rectangle().frame(width: 120, height: 120).opacity(0.01).border(Color.black, width: 1).contextMenu{
                VStack {
                    Button("Orange",action: {
                        self.bgColor = Color.orange
                    })

                    Button("Green",action: {
                        self.bgColor = Color.green
                    })

                    Button("Red",action: {
                        self.bgColor = Color.red
                    })
                }
            }
        }.frame(width:UIScreen.main.bounds.width, height: 200).background(bgColor)

    }
}

1 Ответ

1 голос
/ 30 апреля 2020

Контекстное меню кэширует контент и использует его постоянно. Вот возможное решение для принудительного обновления.

Протестировано с Xcode 11.4 / iOS 13.4

demo

HStack {
    Rectangle().fill(bgColor) // << use same color
        .frame(width: 120, height: 120)
        .border(Color.black, width: 1)
        .contextMenu{
            VStack {
                Button("Orange",action: {
                    self.bgColor = Color.orange
                })

                Button("Green",action: {
                    self.bgColor = Color.green
                })

                Button("Red",action: {
                    self.bgColor = Color.red
                })
            }
        }.id(UUID())      // << force recreate context menu
}.frame(width:UIScreen.main.bounds.width, height: 200).background(bgColor)
...