在Xcode beta 4中,使用PresentationLink会给出以下警告:“已弃用'PresentationLink':请改用.sheet修饰符。”
我假设它们表示
的某种形式func sheet<Content>(isPresented: Binding<Bool>, onDismiss: (() -> Void)? = nil, content: @escaping () -> Content) -> some View where Content : View
但是我不确定如何切换到此模式-特别是isPresented
参数使我感到困惑。我知道有一个名为isPresented的Environment变量,但是对于当前View来说,这不是吗,不是要呈现的View吗?
我对此最感兴趣,因为我希望这可以解决PresentationLinks仅工作一次的问题(请参阅swiftUI PresentaionLink does not work second time)
现在不赞成使用PresentationLink的人可以提供一个简单的示例来显示视图吗?例如,将以下内容转换为使用.sheet修饰符:
NavigationView {
List {
PresentationLink(destination: Text("Destination View")) {
Text("Source View")
}
}
}
答案 0 :(得分:4)
下面是一个示例,与您的示例非常接近。
import SwiftUI
struct Testing : View {
@State var isPresented = false
var body: some View {
NavigationView {
List {
Button(action: { self.isPresented.toggle() })
{ Text("Source View") }
}
}.sheet(isPresented: $isPresented, content: { Text("Destination View") })
}
}
这确实确实可以解决您所引用的有关PresentationLinks not working the second time的错误
答案 1 :(得分:2)
您应该能够像这样更新代码
struct MainScreen: View {
@State var shown = false
var body: some View {
VStack{
Button(action: {
self.shown.toggle()
}) {
Text("Press me to present")
}
}.sheet(isPresented: $shown) { () -> SecondScreen in
return SecondScreen(dismissFlag: self.$shown)
}
}
}
struct SecondScreen: View {
@Binding var dismissFlag: Bool
var body: some View {
VStack{
Button(action: {
self.dismissFlag = false
}) {
Text("Second screen, click to exit")
}
}
}
}
关于环境变量isPresented,您可以使用该方法,并且应该可以在SecondScreen视图中设置isPresented?.value = false,但是我无法在Beta 4中使它起作用我已经在Beta 3中使用了这种方法。
答案 2 :(得分:1)
在当前方法稳定之前,我将使用这些代码?
UIApplication.shared.windows[0].rootViewController!.present(UIHostingController(rootView: view), animated: true, completion: nil)
UIApplication.shared.windows[0].rootViewController!.dismiss(animated: true, completion: nil)
({.sheet
在使用VStack
或List
时似乎已损坏或难以使用)
答案 3 :(得分:0)
我建议使用导航链接
// GET api/Picture/lower_0000_012
[HttpGet("{id}")]
public async Task<IActionResult> GetPictureAsync(string id)
{
var res = Task.Run(() => _repo.GetPictureSet(id));
return Ok(await res);
}
this文章中的更多详细信息