隐藏按钮时navigationBarItems位置不一致

Posted

技术标签:

【中文标题】隐藏按钮时navigationBarItems位置不一致【英文标题】:navigationBarItems position inconsistency when a button hidden 【发布时间】:2019-12-21 08:22:08 【问题描述】:

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

@Environment(\.editMode) var mode

...

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

第一次激活editMode后,尾随导航栏项目的位置不会回到原来的位置,这些是截图(模拟器中iPad的右边缘):

然后,激活编辑模式

到目前为止的行为符合预期,但是当我们切换停用时,发生了这样的事情:

注意编辑按钮向左移动了,有没有办法解决这个问题?这是预期的行为吗?我希望它在 editMode 停用时就像第一张图片一样

【问题讨论】:

【参考方案1】:

我已将此作为错误报告给 Apple。当您减少其中的项目数量时,HStack 似乎不会自行调整大小。因此,剩余的单个按钮位于前 2 个按钮占用的空间的中心。

在 Xcode 12.0 beta 2 中未修复

【讨论】:

【参考方案2】:

这个解决方案有点老套,但它解决了这个不需要的问题。

我使用了私有状态:

@State private var bug: Bool = false

(并且您可以在需要时致电self.bug = false(例如.onAppear...) 并且不要忘记在点击编辑按钮时执行self.bug = true...)

由于这种状态,您可以为编辑按钮设置条件偏移:

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

【讨论】:

以上是关于隐藏按钮时navigationBarItems位置不一致的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI模态表示仅可从navigationBarItems进行一次

SwiftUI:当“navigationBarItems”修改列表时,“listRowInsets”无法按预期工作[重复]

SwiftUI 按钮点击区域不准确但在 navigationBarItems 中是正确的

SwiftUI 将 navigationBarItems 按钮与“消息”中的大 navigationBarTitle 对齐

如何在 SwiftUI NavigationBarItem 中用 < 替换 <Back 按钮?

你如何在swiftUI中禁用navigationBaritems