小编Xav*_*oll的帖子

即使列表已正确更新,为什么上下文菜单仍显示旧状态?

我面临的问题是,Context Menu尽管List下面显示的是正确的数据,但显示的数据却是错误的。问题是,一旦触发第一个项目的上下文菜单上的操作,您将看到如何重新List渲染并显示正确的数据,但如果您再次触发第一个项目的上下文菜单,它将不会显示正确的状态。如果您打开第二个项目的上下文菜单,它将显示正确的状态,但如果您现在选择“Two”,并打开相同的上下文菜单,则会State出现错误(当它应该显示时,它将仅显示 1 个选定的项目) 1 和 2,就像List显示的那样)。

感觉好像偏离了一个(就像呈现以前的状态而不是最新的状态),我不确定这是否只是一个错误或者我使用错误。

这是重现该问题的代码片段:

@main
struct ContextMenuBugApp: App {
    
    let availableItems = ["One", "Two", "Three", "Four", "Five"]
    @State var selectedItems: [String] = []
    
    var body: some Scene {
        WindowGroup {
            List {
                ForEach(availableItems, id: \.self) { item in
                    HStack {
                        let isAlreadySelected = selectedItems.contains(item)
                        Text("Row \(item), selected: \(isAlreadySelected ? "true" : "false")")
                    }.contextMenu {
                        ForEach(availableItems, id: \.self) { item in
                            let isAlreadySelected = selectedItems.contains(item)
                            Button …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-list swiftui-state

6
推荐指数
1
解决办法
1754
查看次数

当所有子视图隐藏在动画块中时,UIStackView将其排列的子视图移动到左上角

如果我尝试动画隐藏stackview的所有子视图,我可以看到它们向左上角移动.在展示时,它们的动画从左上角到适当的空间.如果我只隐藏已排列视图的子集,则会按预期动画.

我目前的解决方法是在堆栈中保留一个不可见的子视图,但这是非常不可思议的.

我在躲藏

UIView.animate(withDuration: 0.5) {                
    self.someStack.arrangedSubviews.forEach { $0.isHidden = !$0.isHidden 
}
Run Code Online (Sandbox Code Playgroud)

ios swift uistackview

5
推荐指数
1
解决办法
1095
查看次数

标签 统计

ios ×1

swift ×1

swiftui ×1

swiftui-list ×1

swiftui-state ×1

uistackview ×1