- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Xcode:版本 11.3 (11C29)
目标:运行iOS 13.3的模拟器
在使用工作表和 SwiftUI 时,我遇到了难以诊断的不一致行为。当我:
* 在 NavigationView
本身使用一个按钮,我可以始终调出工作表并将其关闭
* 使用 NavigationView
栏中的按钮(即 navigationBarItems
),行为不一致:有时它会毫无问题地切换,有时它会“锁定”并且不响应约 10 秒,然后再次运行。在界面中四处滑动并执行其他操作似乎有助于“重置”功能。
最小可重现示例:
import SwiftUI
struct ContentView: View {
@State var isModalShowing = false
var body: some View {
NavigationView {
VStack {
List {
ForEach(1..<5) { number in
Text(String(number))
}
}
Button("First Modal Button") {
self.isModalShowing = true
}
}
.navigationBarItems(leading:
Button("Second Modal Button") {
self.isModalShowing = true
})
}
.sheet(isPresented: $isModalShowing) {
TestView(isPresented: self.$isModalShowing)
}
}
}
struct TestView: View {
@Binding var isPresented: Bool
var body: some View {
VStack {
Text("Hello SwiftUI!")
Button("Dismiss") {
self.isPresented = false
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
注意事项:
* 按第一个模式按钮
始终有效
* 第一次关闭模态后,按 Second modal button
会出现不一致的情况(尝试连续使用此按钮 ~5-10 次,它应该会锁定,但很难预测何时会锁定)
已经有 a few StackOverflow 问题/answers about this ,但到目前为止没有一个对我有用,他们似乎在谈论 Xcode Betas,而我处于稳定状态(希望 11.3 稳定)。传递状态的不同方式(@Binding
与 @Environment
)没有帮助。在调用 .sheet
的地方移动也没有改变任何东西。我认为它也与 List
和/或 ForEach
有关,但我是 Swift 的新手,不确定如何进一步调试。
最佳答案
我认为这是一个错误。虽然我的回答不会解决这个问题,但可以为您提供考虑的选项。
出于好奇,我对 View 层次结构进行了一些调试。使用当前设置,最初导航栏按钮保留在这里(突出显示为蓝色):
然后您出示工作表并相应地取消工作表。解雇后,导航栏按钮的位置不太正确。参见:
按钮的 Text
保持在正确的位置,但条形按钮偏离了它应该在的位置。
但如果您使用 NavigationLink
而不是 .sheet
表示,则不会发生这种位移。
嗯,这个问题普遍存在于导航栏标题的 TitleDisplayMode
的 large
选项上,而且很长一段时间都是默认的。但是如果使用了inline
选项,这个问题就不存在了。请看,使用 inline
选项,在关闭工作表之前和之后,导航栏按钮保持在同一位置:
这意味着,您现在有两个选择要考虑:
使用 NavigationLink
代替工作表演示。您可以通过将以下代码放在最外层的 View
中(在您的例子中是 VStack
)来做到这一点:
NavigationLink(destination: TestView(), isActive: self.$isModalShowing) {
EmptyView()
// no need to provide any other view as it will be triggered by the action
// of navigation bar button item which already provides its own view
}
Note: This
NavigationLink
option isn't tested with Xcode 11.3 or newer as navigation link seems to misbehave with this version. But works as expected upto Xcode 11.2.1. More on SwiftUI unable to navigate back and forth with navigationLink
使用导航栏TitleDisplayMode
的inline
选项为:
.navigationBarTitle(Text("Home"), displayMode: .inline)
// you can get rid of the title "Home" with empty "" string though
关于ios - SwiftUI 工作表 : Inconsistent sheet behaviour with navigationBarItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59494452/
有了这段代码,为什么 navigationBarItem 不显示?该 View 在工作表中被调用,但这在之前并不重要...... struct ChangePasswordView: View {
如何动态更改 SwiftUI 导航栏项目? 我在 NavigationView 中有一个 TabView,我希望导航栏项目根据所选的选项卡进行更改。但是,我很难确定如何使用 .onAppear() 来
在我关闭工作表后,我上面屏幕上的按钮不再起作用。只有在按下非交互表面后,按钮才能再次工作。我使用 swift 版本 5,错误发生在模拟器和设备上。 #编辑 代码片段 AddView 这将显示在工作表中
我有一个可以显示为模式的 View ,也可以简单地推送到导航堆栈上。当它被按下时,它在左上角有后退按钮,当它显示为模态时,我想添加一个关闭按钮(我的许多测试人员不容易弄清楚他们可以滑下模态并且真的需要
我的 NavigationBarItems 有一个奇怪的问题。第一次应用程序启动后(当应用程序未在后台运行时),BarButton 被放错位置(参见屏幕截图 1)。按钮标题应为“PDF”。 Scree
我创建了一个新的 ViewController,前面有一个 NavigationController。现在我在导航栏中看到了这个演示文稿。这是之前来自 View Controller 的任何图像。我没
我有一个包含导航栏项目的 View ,并将该 View 嵌入到 TabView 中。但这样做时,栏项目不再出现。如果我在 TabView 之外调用 View ,一切都会按预期工作。 下面是一个小示例项
我的HomeView(我存储电影列表的位置)具有NavigationView和NavigationLink,目标为 >详细信息 View 。 当我想在 DetailView 中添加 Navigatio
当您从导航栏项目内的按钮显示模式时,这是 SwiftUI 中的一个错误。 在下面的代码中 Button 1 按预期工作,但 Button 2 只工作一次: struct DetailView: Vie
我希望能够使用 NavigationButton 导航到 .navigationBarItems 中的新 View 。这就是我期望的工作方式: NavigationView { Text("H
.navigationBarItems已弃用。存在替代品吗? 最佳答案 是.toolbar一个或多个组的修饰符 ToolbarItem其中的元素。 请参阅我另一篇帖子中的演示 How does one
我花了很多时间研究和使用不同的代码来完成这项工作,但似乎无法弄清楚。下面你会看到两段代码,一段是我创建“完成”栏按钮项,另一段是检查键盘是否存在,并在单击按钮时关闭它。我遇到的一个问题是,我只希望栏按
我的 view 有这个代码 struct ContentView: View { var body: some View { NavigationView{
我试图根据在 NavigationBar 菜单中选择的选项显示不同的 View 。我陷入了执行此操作的最佳方法。首先,根据我目前的做法(我认为这是不对的!),当我按下菜单项时,我在 Xcode 调试器
我想在导航栏上的所有内容下方添加一个 View 。我需要将它们作为 subview 添加到我的导航栏,以便它们出现在任何详细 View Controller 上。 这是我迄今为止在自定义 Naviga
Xcode:版本 11.3 (11C29) 目标:运行iOS 13.3的模拟器 在使用工作表和 SwiftUI 时,我遇到了难以诊断的不一致行为。当我: * 在 NavigationView 本身使用
我想要一个带有 1 个 NavigationBarItem 的 BottomNavigationBar。目的是显示列表的记录数。 有人可以告诉我是否有办法实现吗? 我看不出“items:”必须超过 1
我很难尝试更改选定/未选定图标和 Activity 指示器的颜色。 docs没有示例或适当的 Kdocs,而且我似乎无法在网上找到任何示例(请向我指出您知道的任何示例)。图标只是不改变颜色并保持黑色。
我使用的是最新版本的 Xcode (11 Beta 16) 和 macOS (10.15 Beta 6) 我正在尝试创建两个 View 。从第一个 View ,您应该能够通过尾随导航栏项目导航到第二个
我正在创建一个 SwiftUI 应用程序,我正在使用 NavigationView 和一个大标题栏。但是,我不喜欢 NavigationBarItems 按钮没有与消息应用程序(第一张和第二张图片)中
我是一名优秀的程序员,十分优秀!