ios - SwiftUI App 在按钮点击时不显示工作表
问题描述
我正在创建一个 SwiftUI 应用程序,并希望添加一个设置屏幕,当点击齿轮图标时该屏幕将显示为模式表。由于某种原因,当应用程序在设备或模拟器上运行时点击齿轮时,不会出现工作表。但是,当我运行它时,它确实出现在 Xcode Preview 中。
我在下面包含了整个 ContentView 代码,并使用应该显示工作表的按钮突出显示了部分。SettingsPage() 只是普通的 SwiftUI 模板,上面写着 Hello, World。
谢谢。
struct ContentView: View {
@StateObject var locationViewModel = LocationManager()
@State private var showMoreInfo: Bool = false
@State private var showingTopSpeed: Bool = false
@State var showingSettingsScreen: Bool = false
private var currentSpeed: String = "Your current speed is:"
private var topSpeed: String = " Your top speed is:"
var body: some View {
VStack {
HStack(alignment: .lastTextBaseline) {
GPSStrengthView(horizontalAccuracy: locationViewModel.userHorizontalAccuracy)
Spacer()
Button(action: {
withAnimation {
showingTopSpeed.toggle()
print("Toggling showing top speed")
}
}) {
Image(systemName: "speedometer")
.foregroundColor(showingTopSpeed ? .primary : .accentColor)
}
Button(action: {
withAnimation {
showMoreInfo.toggle()
}
}) {
Image(systemName: "filemenu.and.selection")
.renderingMode(.original)
}
//BUTTON IN QUESTION ####################################
Button(action: {
showingSettingsScreen = true
}) {
Image(systemName: "gear")
} .sheet(isPresented: $showingSettingsScreen, content: {
SettingsPage()
})
//############################################
}
.padding(.leading)
.padding(.trailing)
Spacer()
Text(showingTopSpeed ? currentSpeed : topSpeed)
SpeedView(speed: showingTopSpeed ? locationViewModel.userSpeed : locationViewModel.userTopSpeed)
if showMoreInfo {
Text(String(format: "With an accuracy of: +/- %.2f", locationViewModel.userSpeedAccuracy * 2.236936))
.animation(.easeInOut)
}
Spacer()
HStack {
Spacer()
CompassView()
.scaleEffect(scaleVar)
.frame(width: frameDimensions, height: frameDimensions)
}
.padding()
}
}
解决方案
尝试将您的 .sheet() 移动到最外层的 VStack,而不是将其直接应用于 Button
struct ContentView: View {
@StateObject var locationViewModel = LocationManager()
@State private var showMoreInfo: Bool = false
@State private var showingTopSpeed: Bool = false
@State var showingSettingsScreen: Bool = false
private var currentSpeed: String = "Your current speed is:"
private var topSpeed: String = " Your top speed is:"
var body: some View {
VStack {
HStack(alignment: .lastTextBaseline) {
GPSStrengthView(horizontalAccuracy: locationViewModel.userHorizontalAccuracy)
Spacer()
Button(action: {
withAnimation {
showingTopSpeed.toggle()
print("Toggling showing top speed")
}
}) {
Image(systemName: "speedometer")
.foregroundColor(showingTopSpeed ? .primary : .accentColor)
}
Button(action: {
withAnimation {
showMoreInfo.toggle()
}
}) {
Image(systemName: "filemenu.and.selection")
.renderingMode(.original)
}
//BUTTON IN QUESTION ####################################
Button(action: {
showingSettingsScreen = true
}) {
Image(systemName: "gear")
}
//############################################
}
.padding(.leading)
.padding(.trailing)
Spacer()
Text(showingTopSpeed ? currentSpeed : topSpeed)
SpeedView(speed: showingTopSpeed ? locationViewModel.userSpeed : locationViewModel.userTopSpeed)
if showMoreInfo {
Text(String(format: "With an accuracy of: +/- %.2f", locationViewModel.userSpeedAccuracy * 2.236936))
.animation(.easeInOut)
}
Spacer()
HStack {
Spacer()
CompassView()
.scaleEffect(scaleVar)
.frame(width: frameDimensions, height: frameDimensions)
}
.padding()
}
.sheet(isPresented: $showingSettingsScreen, content: {
SettingsPage()
})
}
推荐阅读
- drmaa - Blender中基于DRM的计算
- asp.net - 我可以防止我的 asp.net mvc-4 Web 应用程序中的 Elmah 暴露用户的密码吗
- r - 是否有代码可以在 dplyr 等 R 安装包中查找函数的数量
- python - 如何过滤任意结果的查询?
- python - 如何创建一个字典,将 csv 列内容作为键,将出现次数作为值?
- expect - 偶尔期望发送命令被截断
- r - R - 合并分布在数据帧列表中的标识符值
- php - 带有后缀的phpmailer中的SMTP Connect()
- ruby-on-rails - 如何优化对更改对象及其依赖记录的搜索
- php - 注意:只能通过引用返回变量引用