Stackview标签没有以编程方式添加
问题描述:
我试图做所有事情都没有故事板,但添加我的标签时仍然没有零,但我不明白为什么。我确信它的死亡简单,即时通讯是盲目的,但我只是不能看到它后很多谷歌搜索。Stackview标签没有以编程方式添加
视图控制器:
class SquaresViewController: UIViewController {
let stackView = OAStackView()
let titleView = TitleView(frame: CGRect.zero)
@IBOutlet var squaresCollectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
stackView.axis = .vertical
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.addArrangedSubview(titleView)
titleView.snp.makeConstraints { make in
make.height.equalTo(50)
make.top.equalTo(view.snp.top)
make.left.equalTo(view.snp.left)
make.right.equalTo(view.snp.right)
}
}
}
titleview的:
import UIKit
class TitleView: UIView {
@IBOutlet weak var titleText: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
self.translatesAutoresizingMaskIntoConstraints = false
createView()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func createView() {
titleText = UILabel(frame: CGRect.zero)
titleText.translatesAutoresizingMaskIntoConstraints = false
titleText.text = "Tappy tap tap a square!"
titleText.textAlignment = .center
titleText.numberOfLines = 0
self.addSubview(titleText)
titleText.snp.makeConstraints { make in
make.edges.equalTo(self.snp.edges)
}
}
}
在构建失败的:
titleText.translatesAutoresizingMaskIntoConstraints = false
有:
fatal error: unexpectedly found nil while unwrapping an Optional value
任何帮助将是伟大的,即时通讯确定其简单,但我不能再看到了。谢谢
答
首先,我不明白为什么你为titleText创建IBOutlet
如果你不想使用故事板。如果你不想用故事板,改变实施:
var titleText : UILabel!
其次,应用程序崩溃,因为你要求它在还未被添加到层次结构中的视图执行操作。为了便于阅读,我已经注释了除了那些重要的行外的所有行。请看下图:
func createView() {
//titleText = UILabel(frame: CGRect.zero)
titleText.translatesAutoresizingMaskIntoConstraints = false // <-- You are trying to perform an operation on titleText here
//titleText.text = "Tappy tap tap a square!"
//titleText.textAlignment = .center
//titleText.numberOfLines = 0
self.addSubview(titleText) // <-- but you are adding it to the view hierarchy here
//titleText.snp.makeConstraints { make in
//make.edges.equalTo(self.snp.edges)
//}
}
titleText
已被添加到视图层次,你可以调用它translatesAutoresizingMaskIntoConstraints
之前,像这样:
self.view.addSubview(titleText)
titleText.translatesAutoresizingMaskIntoConstraints = false // <-- Here we are waiting until the view has been added to the hierarchy to perform operations on it
所以尝试改变实现看起来像这样:
import UIKit
class TitleView: UIView {
var titleText: UILabel!
override init(frame: CGRect) {
// leave as is, removed for space
}
required init?(coder aDecoder: NSCoder) {
// leave as is, removed for space
}
func createView() {
titleText = UILabel(frame: CGRect.zero)
titleText.text = "Tappy tap tap a square!"
titleText.textAlignment = .center
titleText.numberOfLines = 0
self.addSubview(titleText)
titleText.translatesAutoresizingMaskIntoConstraints = false
titleText.snp.makeConstraints { make in
make.edges.equalTo(self.snp.edges)
}
}
}
非常感谢。我尝试重新排序,但iboutlet是主要问题。 – Wazza
没问题! @WayneRumble – Wes