隐藏按钮时NavigationBarItems位置不一致

时间:2019-12-21 08:22:08

标签: ios swift swiftui

假设对于SwiftUI中具有可操作editMode环境的NavigationView,我们具有以下navigationBarItems:

@Environment(\.editMode) var mode

...

.navigationBarItems(trailing: HStack {
            if mode?.wrappedValue == .active {
                Text("Cancel")
            }
            EditButton()
        }
)

在首次激活editMode后,尾随的导航栏项目的位置将不会返回到原始位置,这些是屏幕截图(模拟器中iPad的右边缘):

first init

然后,激活编辑模式

activate edit mode

到目前为止的行为均符合预期,但是当我们切换停用时,发生了以下情况:

Edit button shifted

请注意,“编辑”按钮向左移动,是否可以解决此问题?这是预期的行为吗?我希望它会像editMode停用时的第一张图片一样

2 个答案:

答案 0 :(得分:0)

我已经向Apple报告这是一个错误。当您减少其中的项目数时,HStack似乎并没有调整自身大小。因此,剩余的单个按钮位于前两个按钮所占据的空间的中心。

在Xcode 12.0 beta 2中未修复

答案 1 :(得分:0)

该解决方案虽然有点笨拙,但可以解决此不必要的问题。

我使用了私有状态:

@State private var bug: Bool = false

(然后您会在需要时致电self.bug = false(例如.onAppear{...}) 而且,当点击编辑按钮时,别忘了做self.bug = true ...

由于这种状态,您可以在编辑按钮上添加条件偏移量:

.offset(x: self.bug ? 30 : 0)