iOS 13 iPhone 10 和 11 只显示黑色 View 但期待 UITabBarController [ View 层次结构显示它没有高度]

标签 ios swift ios13

所有版本和手机都可以,运行流畅但在 iPhone 11 中一切都变黑了。我没有使用 Storyboard,UI 是用代码制作的,模式是 MVVMC。知道为什么在 iPhone 11 上应用程序变黑了吗?

图片:/image/hnjdG.png

这是 View 层次结构:https://www.dropbox.com/s/e3mzzpwn8iozhc0/Screen%20Shot%202019-10-08%20at%2012.11.18%20PM.png?dl=0

[编辑:请注意该应用程序是在 XCODE 10.2.1 中构建的]

rootViewcontroller 是 TabBarController。

在 AppDelegate.swift 中

var window: UIWindow?
private var appCoordinator: AppCoordinator!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    FirebaseApp.configure()

    window = UIWindow()
    appCoordinator = AppCoordinator(window: window!)
    appCoordinator.start{}

    return true
}

func applicationWillTerminate(_ application: UIApplication) {
    //TODO: avoid relogout

}

在 TabCoordinator.swift 中

enum SectionTab: Int, Menu {
    //case home
    case futures
    case trading
    case wallet
    case account

    func title(languageManager: LanguageManager) -> String {
        switch self {
        //case .home: return languageManager.localizedString("router.home")
        case .futures: return languageManager.localizedString("router.futures")
        case .trading: return languageManager.localizedString("router.spot")
        case .wallet: return languageManager.localizedString("router.wallets")
        case .account: return languageManager.localizedString("router.account")
        }
    }

    var image: UIImage {
        switch self {
        //case .home: return UIImage.init(named: "icTabHome")!
        case .futures: return UIImage.init(named: "icTabFutures")!
        case .trading: return UIImage.init(named: "icTabTrading")!
        case .wallet: return UIImage.init(named: "icTabWallet")!
        case .account: return UIImage.init(named: "icTabAccount")!
        }
    }

    var highlightedImage: UIImage {
        switch self {
        //case .home: return UIImage.init(named: "icTabHomeActive")!
        case .futures: return UIImage.init(named: "icTabFutures")!
        case .trading: return UIImage.init(named: "icTabTradingActive")!
        case .wallet: return UIImage.init(named: "icTabWalletActive")!
        case .account: return UIImage.init(named: "icTabAccountActive")!
        }
    }

}

init(window: UIWindow, dependencies: Dependencies) {
    self.window = window
    self.dependencies = dependencies
}

override func start(completion: @escaping CoordinatorCompletion) {
    super.start(completion: completion)

    let tabbarController = UITabBarController()
    let tabs : [SectionTab] = [.futures, .trading, .wallet, .account]
    let viewControllers = createViewControllers(tabs: tabs)

    tabbarController.viewControllers = viewControllers.map{ $0.viewController }
    tabbarController.view.backgroundColor = .white
    tabbarController.tabBar.tintColor = UIColor.appLightBlue
    tabbarController.tabBar.unselectedItemTintColor = UIColor.appDarkGray

    let notification = Notification.Name.init(LanguageChangedNotification)
    NotificationCenter.default.rx.notification(notification).subscribe({_ in
        tabbarController.viewControllers?.enumerated().forEach({ (arg0) in
            let (offset, vc) = arg0
            vc.tabBarItem.title = tabs[offset].title(languageManager: self.dependencies.languageManager)
        })
    }).disposed(by: disposeBag)

    window.rootViewController = tabbarController
    window.makeKeyAndVisible()
}

private func createViewControllers(tabs: [SectionTab]) -> [(viewController: UIViewController, coordinator: BaseCoordinator)] {
    return tabs.map({ (tab) -> (viewController: UIViewController, coordinator: BaseCoordinator) in
        let viewController: UIViewController

        let coordinator: BaseCoordinator
        switch tab {
        case .futures:
            viewController = BTSENavigationController()
            coordinator = FuturesCoordinator(navigationController: viewController as! BTSENavigationController, dependencies: dependencies)
            coordinate(to: coordinator)
        case .trading:
            viewController = BTSENavigationController()
            coordinator = SpotCoordinator(navigationController: viewController as! BTSENavigationController, dependencies: dependencies)
            coordinate(to: coordinator)
        case .wallet:
            viewController = BTSENavigationController()
            coordinator = WalletCoordinator(navigationController: viewController as! BTSENavigationController, dependencies: dependencies, url: self.dependencies.client.url(for: .wallets))
            coordinate(to: coordinator)
        case .account:
            viewController = BTSENavigationController()
            coordinator = AccountCoordinator(navigationController: viewController as! BTSENavigationController, dependencies: dependencies)
            coordinate(to: coordinator)
        }

        viewController.tabBarItem = UITabBarItem.init(title: tab.title(languageManager: dependencies.languageManager), image: tab.image, selectedImage: tab.highlightedImage)

        return (viewController: viewController, coordinator: coordinator)
    })
}

最佳答案

即使我只是在 AppDelegate 上这样做:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        FirebaseApp.configure()

        window = UIWindow()
        window.rootViewController = UIViewController() //this should show white screen

        return true
}

应用程序将显示黑屏,因为 rootviewController 没有委托(delegate)。看来我真的必须实现 Scenedelegate。

关于iOS 13 iPhone 10 和 11 只显示黑色 View 但期待 UITabBarController [ View 层次结构显示它没有高度],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58127641/

相关文章:

swift - MKMapSnapshotter 返回黑色背景图像 iOS 13

ios - 如何使用 ScrollView 单击列表部分内的项目以导航到详细信息页面 SwiftUI

ios - 循环核心数据关系

ios - 应用程序适用于 Iphone,但不适用于 iPad

ios - 在 Swift 中循环遍历 CollectionView 单元格

ios - 具有圆角半径和阴影的 SWIFT UITableViewCell

android - 使用端点或 HTTP 请求

ios - 如何屏蔽和添加阴影到 UIView

ios - 如何使用 GCD 创建单例串行队列?

xcode - 无法安装 - 找不到此可执行文件的有效配置文件 Xcode 11