ios - UIViewController 没有正确加载它的 xib

标签 ios swift ipad

我正在重现以下案例,希望找出问题的理论原因。问题如下:

当我声明一个新的 Swift View Controller 和 nib 对时,有时 View Controller 的导出根本不加载( nib 根本不加载)。这只发生在特定设备上(在我的例子中是 iPad mini 1,非视网膜,iOS 8.4.1。在我使用的所有其他设备上,一切都按预期工作。

我找到的解决方案是用 nib 方法覆盖 init :

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: Constants.viewControllerNibName, bundle: nil)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

当我手动输入 Nib 名称时,所有设备上的一切都按预期工作。

谁能给我一点启发,为什么需要这样做,问题的原因是什么。

最有趣的部分是这个问题只发生在非常小的设备子集上(在我的例子中,就是上面提到的)。

更新:似乎问题只发生在 iOS 8 而不是 iOS 9+,在测试时发现并从 Zonily Jame 下面链接的票证中发现。

最佳答案

这是我用来手动设置 viewController 的方法

class ViewController: UIViewController {
    init() {
        super.init(style: .plain)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

然后我只设置框架并将其添加为 subview 。

let vc = ViewController()!
vc.view.frame = CGRect(x: xValue, y: yValue, width: desiredWidth, height: desiredHeight)
view.addSubview(vc.view)
addChildViewController(vc)
vc.didMove(toParentViewController: self)

并通过说将其删除

vc.view.removeFromSuperview()
vc.removeFromParentViewController()
vc = nil

关于ios - UIViewController 没有正确加载它的 xib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40894716/

相关文章:

ios - 生产构建中的断言导致崩溃

swift - 是否可以在 Swift 中调用一个函数作为另一个函数的参数?

Swift 可选的 nil 检查返回与实际情况不同的结果

ios - 如何在 iOS 中安装字体系统

ios - NSDate 表示每月的每一天

ios - 默认情况下在 collectionView 中滚动时选择单元格

swift - XCUITest 类拆解不会删除应用程序。但是如果它的实例被拆解就可以工作。我究竟做错了什么?

ipad - 使用 modalInPopover 显示弹出框时如何禁用主工具栏?

ios - 使用启动屏幕在通用应用程序中禁用对 iPad Pro 的支持

javascript - 如何在 iPhone 上的方向更改时重置 Web 应用程序的比例/缩放?