1

我的 ViewController 中有几个最初隐藏的 UIView。一旦我从 Firebase 获得成功响应,它们就会被隐藏。这些最初隐藏的视图具有我viewDidLayoutSubviews()根据设备大小修改的约束(来自 Storyboard)。

在 iOS 11.0 之前,这一切都很完美。完美 = 视图仍然隐藏。一旦 Firebase 返回一个值,视图就会变得不隐藏,并且根据我在viewDidLayoutSubviews().

从 iOS 11.0.1 及更高版本开始,我现在正在崩溃viewDidLayoutSubviews().

fatal error: unexpectedly found nil while unwrapping an Optional value

这是我的代码,它在iOS 11.0.1 及更高版本viewDidLayoutSubviews()中导致崩溃。

override func viewDidLayoutSubviews() {
    if UIScreen.main.bounds.size.height == 736 { // iPhone 8+
        welcomeViewWidthConstant.constant = 160.0
        welcomeViewHeightConstant.constant = 160.0
    }
}

welcomeViewWidthConstant并且welcomeViewHeightConstant是在 Firebase 响应之前不可见的视图的高度和宽度约束。

再一次,以上在 iOS 11.0 中运行完美

如何在 iOS 11.0.1 及更高版本中设置约束(基于设备大小)?

4

2 回答 2

0

我假设welcomeViewWidthConstant 是您声明的出口!(隐式展开)。

如果是这样,我会查看正在调用它的堆栈跟踪 - 是否可能未加载视图?

添加

guard let self.isViewLoaded else { return }

到函数顶部

但是,我也认为你会改变 didLayout 中的约束是很奇怪的。我希望您会调用setNeedsUpdateConstraintsFirebase 的返回(可能会移至主队列),然后覆盖updateConstraints以进行更新。

于 2017-10-26T19:38:42.090 回答
0

各位,谢谢你的帮助!我实际上找到了罪魁祸首......故事板中与约束的连接断开了。所以welcomeViewWidthConstant 和welcomeViewHeightConstant 的@IBOutlet 实际上是nil。让我失望的是我的设备不是 iPhone 8+ 尺寸,所以它从裂缝中溜走了。

于 2017-10-26T20:09:14.727 回答