ios - 在 xcode 11 上运行应用程序后,iPhone 10 和 11 没有足够的高度

标签 ios ios13 xcode11

所以我在 xcode 10.2.1 中内置了一个应用程序,然后我稍后在 Xcode 11 上运行该应用程序。该应用程序显示黑屏,因为 View 没有足够的高度(只有 48.0,为什么???)。所有设备都工作正常,但运行 iOS 13 的 iPhone 10 和 11 确实存在错误。

注意:未使用 Storyboard,该应用程序是在 Xcode 10.2.1 中构建的,swift 5、iOS 13 iPhone 5 - 8 运行良好

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

我尝试使用 SceneDelegate 但没有成功。我也尝试过使用场景来选择退出。

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
}

AppCoordinator.swift

class AppCoordinator: BaseCoordinator {
    private let window: UIWindow
    private let dependencies: AppDependency

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

    override func start(completion: @escaping CoordinatorCompletion) {
        showTabBarController()
    }

    /// Always represent tabbar controller when authentication state changed
    func showTabBarController() {
        let tabCoordinator = TabCoordinator(window: window, dependencies: dependencies)
        coordinate(to: tabCoordinator)
    }

}

TabCoordinator.swift

class TabCoordinator: BaseCoordinator {
    typealias Dependencies = HasAPIClient & HasUserManager & HasLanguageManager & HasSpotSocketEngine & HasFuturesSocketEngine
    private let window: UIWindow
    private let dependencies: Dependencies

    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)
        })
    }
}

最佳答案

解决办法是这样的。对于那些像我一样被这个问题困扰的人。

https://github.com/tonySwiftDev/UITabbar-fixIOS12.1Bug/issues/4

谢谢!

关于ios - 在 xcode 11 上运行应用程序后,iPhone 10 和 11 没有足够的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58298318/

相关文章:

ios - 在 iOS 13 全屏中呈现模式

ios - SwiftUI 导航按钮 : How to navigate to different destinations

xcode - Xcode 10+:如何切换到旧版构建系统?

ios - 访问 [AnyHashable : Any] as NSDictionary 中的信息

android - Firebase IOS UTM 安装跟踪

ios - UIWebView webViewDidStartLoad 方法未在 swift 中调用

ios - 从命令行代码设计 ios 应用程序

ios - 如何使用 Ionic3 获取 iOS 13 WiFi SSID?

swift - UIRefreshControl 的tintColor 无法初始设置

ios - SwiftUI 如何在点击按钮时推送到下一个屏幕