隐藏按钮时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 对齐