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>
为什么会这样?如何解决?
答案 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,则会自动跳过赋值。