【问题标题】:UIViewController does not load its xib correctlyUIViewController 未正确加载其 xib
【发布时间】:2017-03-17 20:55:19
【问题描述】:

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

当我声明一个新的 Swift 视图控制器和 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")
}

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

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

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

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

【问题讨论】:

  • viewControllerNibName 是静态的吗?
  • 我在阅读之前完全回答了这个问题。我没有直接尝试做您所说的事情,但是如果您可以提出更具体的问题,我应该提供宝贵的意见。
  • LOL 我们遇到了同样的问题Nib Issue 但不是特定设备,我的只是不会在特定操作系统上启动
  • 你也可以这样做而不是覆盖init(nibname: bundle:)方法required init() { super.init(nibName: Constants.viewControllerNibName, bundle: nil) }
  • 感谢您的快速回复:)。问题可能是iOS特定版本引起的,我唯一的iOS 8设备是上面提到的设备,我会做更多的测试并让你知道结果。 PS:@ZonilyJame,是的,您也可以将代码添加到所需的 init 方法中。 :)

标签: ios swift ipad


【解决方案1】:

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

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

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

然后我只是设置框架并将其添加为子视图。

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

【讨论】:

  • OP 想要加载一个带有 nib 的视图控制器。您的解决方案对此不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2010-12-10
  • 1970-01-01
  • 2011-05-07
  • 2019-04-20
  • 2014-12-11
相关资源
最近更新 更多