我有一个小弹出框示例,其中一个按钮会触发一个弹出框。弹出框只包含一点 UI,在这种情况下是两个按钮,但它仍然占用了大量空间,而不是像我习惯的 UIKit 那样整齐地环绕内容。如何使弹出框适合内容的大小?
iPad 模拟器的屏幕截图和以下代码:
struct ContentView: View {
@State private var showingPopupA = false
var body: some View {
HStack {
Button(action: {
self.showingPopupA.toggle()
}, label: {
Text("Button")
}).popover(isPresented: self.$showingPopupA) {
VStack {
Button(action: {
// Do something
self.showingPopupA = false
}) {
Text("Option A")
}
Button(action: {
// Do something
self.showingPopupA = false
}) {
Text("Option B")
}
}.background(Color.red)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在试验一个“纯”的 SwiftUI 应用程序。它没有,SceneDelegate所以我不确定在 iOS 上运行时我需要的 Hosting Controller 东西放在哪里。
以前在SceneDelegate我有代码会说这样的话:
let contentView = ContentView()
window.rootViewController = UIHostingController(rootView: contentView)
Run Code Online (Sandbox Code Playgroud)
现在我只有一个@main文件:
var body: some Scene {
WindowGroup {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
那么 Hosting Controller 的东西去哪里了(或者我还能如何访问 SwiftUI 没有的 UIKit 功能?(具体来说,我想弄乱状态栏,自动隐藏主页指示器,以及一些关于亮/暗的事情) SwiftUIpreferredColorScheme不涵盖的模式。)
我需要在SwiftUI中制作一个警报,其中有一个可编辑的TextField。目前,SwiftUI(从Xcode 11.3 开始)不支持此功能,因此我正在寻找解决方法。
我知道我可以通过在UIHostingController 中包装普通的 UIKit 位来实现,但我真的想坚持使用全 SwiftUI 实现。
我在ZStack 中有两个VStacks,前面的一个(带有 TextView 的那个)被隐藏和禁用,直到你点击按钮。看看这个:
import SwiftUI
struct ContentView: View {
@State var isShowingEditField = false
@State var text: String = "12345"
var body: some View {
ZStack {
VStack {
Text("Value is \(self.text)")
Button(action: {
print("button")
self.isShowingEditField = true
}) {
Text("Tap To Test")
}
}
.disabled(self.isShowingEditField)
.opacity(self.isShowingEditField ? 0.25 : 1.00)
VStack(alignment: .center) {
Text("Edit the …Run Code Online (Sandbox Code Playgroud) 如何向.alert()SwiftUI 中的函数添加 TextField?我只能找到需要 Swift 的解决方案,而不是 SwiftUI。
.alert(isPresented:$showingAlert) {
Alert(
title: Text("What is your name?"),
message: Text("Fill in your name in the TextField beow"),
primaryButton: .default(Text("OK")) {
print("Opening...")
},
secondaryButton: .cancel() {
print("cancelled)
}
)
}
Run Code Online (Sandbox Code Playgroud)