SwiftUI App在点击按钮时不显示工作表



我正在创建一个SwiftUI应用程序,并希望添加一个设置屏幕,当点击齿轮图标时将显示为模态表。由于某些原因,当应用程序在设备或模拟器上运行时,点击齿轮时,表格不会出现。但是,当我运行它时,它确实出现在Xcode预览中。

我在下面包含了整个ContentView代码,并突出显示了应该显示工作表的按钮部分。setingpage()只是一个普通的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()
})
}

最新更新