【发布时间】:2020-11-02 23:49:46
【问题描述】:
首先,我查看了一个类似的问题,但它没有解决我的用例。
Present ActionSheet in SwiftUI on iPad
我的问题是我的NavigationView 中有一个NavigationBarItem,按下时会切换一个ActionSheet。此行为在 iPhone 上使用时可以正常工作。
但是,当我在 iPad 上使用它时,屏幕上的两个按钮都会变灰,并且什么也没有发生。再次单击按钮将使它们处于活动状态(蓝色),但同样不会显示任何工作表。
最后,如果我选择屏幕中间的按钮(显示按钮),那么 iPad 上会正确显示一个 ActionSheet。
我已经使用 Xcode 11 & iOS 13.5 和 Xcode 12 & iOS 14 进行了测试。行为没有变化。
import SwiftUI
struct ContentView: View {
@State private var isButtonSheetPresented = false
@State private var isNavButtonSheetPresented = false
var body: some View {
NavigationView {
Button(action: {
// Works on iPad & iPhone
self.isButtonSheetPresented.toggle()
}) {
Text("Show Button")
}
.actionSheet(isPresented: $isButtonSheetPresented,
content: {
ActionSheet(title: Text("ActionSheet"))
})
.navigationBarTitle(Text("Title"),
displayMode: .inline)
.navigationBarItems(trailing:
Button(action: {
// Works on iPhone, fails on iPad
self.isNavButtonSheetPresented.toggle()
}) {
Text("Show Nav")
}
.actionSheet(isPresented: $isNavButtonSheetPresented,
content: {
ActionSheet(title: Text("ActionSheet"))
})
)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
最后,当点击“显示导航”时,它在 iPad 上的显示方式如下:
这是发生此问题的屏幕的简化设置。我需要保留显示的导航设置,但为了清楚起见已将它们包括在内。
*** 已更新 ***
虽然这背后的真实应用程序不可能,但我确实删除了.navigationViewStyle(StackNavigationViewStyle()) 设置,它确实显示了一个 ActionSheet,尽管在错误的位置,如下所示。
这也会导致通过“显示按钮”访问的按钮位置奇怪。
【问题讨论】:
-
它就在那里,出于错误原因,他们只是将其显示在右侧。如果您使用
.navigationBarItems(leading:,您会看到它。 -
@Asperi 好悲痛。不过谢谢,你是对的。如果你想把它写下来作为答案,我会接受。
标签: ios ipad swiftui ios13 actionsheet