這個驚人的問題由于“缺乏技術細節”而被關閉,所以我肯定會在這里放很多。
設定:
- 創建一個 iOS SwiftUI 應用
- 添加檔案如下
- 觀察問題
蘋果應用程式.swift
import SwiftUI
@main
struct AppleApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
內容視圖.swift
import SwiftUI
struct ContentView: View {
@State var isLocked = true
var body: some View {
VStack {
Text("Unlocked view")
.padding()
}.fullScreenCover(isPresented: $isLocked) {
} content: {
LockScreen($isLocked)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
LockScreen.swift
import SwiftUI
struct LockScreen: View {
@Binding var isLocked: Bool
init(_ isLocked: Binding<Bool>) {
self._isLocked = isLocked
}
var body: some View {
ZStack {
Color.gray
VStack {
Text("Locked")
Button("Unlock") {
print("unlock button pressed")
isLocked = false
}
}
}
}
}
struct LockScreen_Previews: PreviewProvider {
@State static var isLocked: Bool = true
static var previews: some View {
LockScreen($isLocked)
}
}
問題:
看一下視頻:應用程式啟動后,“解鎖視圖”可見,“LockScreen”在影片短暫延遲后出現。
期望的結果:
該應用程式在啟動后立即顯示“LockScreen”,但可以通過按“解鎖”按鈕來關閉它。
問題的視頻
帶有示例應用程式的專案檔案
uj5u.com熱心網友回復:
希望您覺得這個有幫助。我知道它沒有 FullScreenCover,但這會立即顯示出來。
import SwiftUI
struct ContentView: View {
@State var isLocked = true
var body: some View {
if self.isLocked {
LockScreen(isLocked: self.$isLocked)
} else {
VStack {
Text("Unlocked view")
.padding()
}
}
}
}
struct LockScreen: View {
@Binding var isLocked: Bool
var body: some View {
ZStack {
Color.gray
VStack {
Text("Locked")
Button("Unlock") {
print("unlock button pressed")
isLocked = false
}
}
}
.ignoresSafeArea()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
uj5u.com熱心網友回復:
根據您對@AlexanderThoren answere 的評論。我添加了影片并簡化了代碼。
添加過渡影片。
添加此擴展程式以隱藏 - 顯示視圖。
extension View {
func showLockView(isLocked: Binding<Bool>) -> some View {
ZStack {
self
if isLocked.wrappedValue {
LockScreen(isLocked: isLocked).animation(.default).transition(AnyTransition.move(edge: .bottom))
}
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
}
}
并將其與您的內容視圖一起使用
struct ContentView: View {
@State var isLocked = true
var body: some View {
VStack {
Text("Unlocked view")
.padding()
}
.showLockView(isLocked: $isLocked) // << Here
}
}
編輯:如評論中所述,這是沒有查看擴展名的解決方案。
struct ContentView: View {
@State var isLocked = true
var body: some View {
ZStack {
VStack {
Text("Unlocked view")
.padding()
}
if isLocked {
LockScreen(isLocked: $isLocked)
.edgesIgnoringSafeArea(.all)
.animation(.default)
.transition(AnyTransition.move(edge: .bottom))
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366658.html
