SwiftUI настройка стиля строки состояния - PullRequest
1 голос
/ 29 сентября 2019

Я пытался установить строку состояния в приложении SwiftUI для светлого текста, поскольку он имеет темный фон.

Я нашел это решение на нескольких сайтах, но не могу заставить его работать.

HostingController.swift

import Foundation
import UIKit
import SwiftUI

class HostingController : UIHostingController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
    }
}

Возвращает ошибку в строке объявления класса Reference to generic type 'UIHostingController' requires arguments in <...> с предлагаемым исправлением Insert '<<#Content: View#>>'.Применение указанного исправления приводит к ошибке Use of undeclared type '<#Content: View#>'

Затем вам нужно изменить window.rootViewController в файле SceneDelegate.swift.

SceneDelegate.swift

...

// Create the SwiftUI view that provides the window contents.
        let contentView = Login()

        // Use a UIHostingController as window root view controller.
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = HostingController(rootView: contentView)
            self.window = window
            window.makeKeyAndVisible()
        }

...

Это приводит к ошибке на window.rootViewController строке Argument passed to call that takes no arguments

У кого-нибудь есть идеи?Кажется, очень сложно просто установить цвет строки состояния, что, я думаю, было бы довольно распространенным требованием.

1 Ответ

2 голосов
/ 29 сентября 2019

Вашему HostingController нужен конкретный тип rootView:

class HostingViewController: UIHostingController<AnyView> {

    @objc override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

Затем используйте его в func scene(_ scene: UIScene, willConnectTo... в качестве rootViewController:

let contentView = ContentView()
    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)

        window.rootViewController = HostingViewController(rootView: AnyView(contentView.environmentObject(SessionStore())))
        self.window = window
        window.makeKeyAndVisible()
    }

Вы не увидите никакой разницы вCanvas, к сожалению, но попробуйте на симуляторе.

...