在打开可选的IBOutlet值时无

时间:2016-11-03 08:56:58

标签: ios objective-c swift uitableview iboutlet

IBOutlet我有一个XIB

在我的自定义视图中,我已将我的插座与@IBOutlet weak var label: UILabel! { didSet { label.textColor = .redColor() } } 文件相关联。我仔细检查过这个。这就是它的样子:

layoutSubviews

override func layoutSubviews() { super.layoutSubviews() label.preferredMaxLayoutWidth = label.frame.size.width } 的实现如下:

layoutSubviews

尽管事实上,必须在UI元素初始化后调用fatal error: unexpectedly found nil while unwrapping an Optional value 方法,但我收到错误:

label.preferredMaxLayoutWidth = label.frame.size.width

此错误由line:

触发
<div ng-include src="'navbar.html'" class="col-sm-3 col-lg-2 sidebar"></div>

为什么会这样?如何解决?

3 个答案:

答案 0 :(得分:1)

尝试在viewDidLayoutSubviews而不是layoutSubviews中执行此操作。您应该在viewDidLayoutSubviews中准备好UI元素,但layoutSubviews中不需要。

答案 1 :(得分:0)

您可以使用if let语句安全地解包标签,以防止崩溃。

if let mylabel = label {
   mylabel.preferredMaxLayoutWidth = mylabel.frame.size.width
}

答案 2 :(得分:0)

您应该使用:

label?.preferredMaxLayoutWidth = label.frame.size.width

之前在layoutSubviews的早期调用中,无法设置插座,但在下一次调用中将是。使用otional链接可以避免显式可选的展开。如果label为nil,则会自动跳过赋值。