Кто угодно знает, как сделать модальный вид с прозрачным фоном.
Точно так же, как приведенная ниже ссылка в быстром
Кто угодно знает, как сделать модальный вид с прозрачным фоном.
Точно так же, как приведенная ниже ссылка в быстром
Я использую шаблон координатора, создавая вид в сборке
let view = UIHostingController(rootView: swiftuiview)
view.view.backgroundColor = .clear
внутри маршрутизатора просто представьте этот UIHostingController
module.modalPresentationStyle = .overCurrentContext
navigationController.present(module, animated: animated, completion: nil)
Если вы хотите размыть фон SwiftUI из проекта UIKit и, возможно, используете представление SwiftUI для модального представления, тогда у меня недавно была такая же проблема, и я создал UIViewController, который принимает UIHostController (в основном UIViewController), а затем изменяет альфа-канал представления HostingController, помещает размытие сзади и представляет его родительскому представлению.
Я создал суть с файлом в нем для общественного использования https://gist.github.com/Ash-Bash/93fd55d89c1e36f592d3868f6b29b259
Вот рабочий пример:
// Initialises BlurredHostingController
var blurredHostingController = BlurredHostingController()
// Sets the Hosting View for the SwiftUI View Logic
blurredHostingController.hostingController = UIHostingController(rootView: ContentView())
// Blur Tweaks for blurredHostingController
blurredHostingController.blurEffect = .systemMaterial
blurredHostingController.translucentEffect = .ultrathin
// Presents View Controller as a Modal View Controller
self.present(blurredHostingController animated: true, completion: nil)
Подарок:
let rootView = Text("Hello world")
let controller = UIHostingController(rootView: rootView)
controller.view.backgroundColor = .clear
UIApplication.shared.windows.first?.rootViewController?.present(controller, animated: true)
Увольнять:
UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true)
У меня не было идеального способа сделать это, но у меня есть обходной путь.
Итак, чтобы представить представление модально, вы можете взять ZStack, сгруппировать в нем несколько представлений и обработать его с помощью переменной @State, подобной этой.
Здесь я указал цвет фона для представления для лучшего объяснения.
struct ContentView : View {
@State private var showModally = false
var body : some View {
ZStack {
Color.red
VStack {
Button(action: {
withAnimation{
self.showModally = true
}
}) {
Text("Push Modally")
}
}
ModalView(show: $showModally)
.offset(y: self.showModally ? 0 : UIScreen.main.bounds.height)
.animation(.spring())
}
}
}
struct ModalView: View {
@Binding var show : Bool
var body: some View {
VStack {
Spacer()
VStack {
Color.white
}
.frame(height : 400)
.cornerRadius(10)
.padding(.horizontal)
}
.background(Color.clear)
.onTapGesture {
self.show = false
}
}
}
В этом случае модальное представление будет представлено модально над представлением содержимого и будет закрыто касанием.
Rectangle
внутриZStack
. НО ... значение по умолчанию для модального представления, похоже, основано на настройке светлого / темного режима. Если вы сделаете заливку прямоугольника Color.clear, у вас все равно будет фон, покрывающий нижележащий вид ... - person dfd   schedule 23.08.2019