现在我正在练习构建IOS应用而不使用storyboard,但我有一个问题想要解决,我创建了一个名为BannerView
的自定义UIView并添加了一个背景(UIView)和一个标题(UILabel),以及在BannerView
中调用此MainVC
,但运行此应用时,它会在函数setupSubviews()
崩溃,我不知道为什么。
import UIKit
import SnapKit
class BannerView: UIView {
var background: UIView!
var title: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
setupSubviews()
}
convenience init() {
self.init(frame: CGRect.zero)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupSubviews()
}
func setupSubviews() {
background.backgroundColor = .gray
title.text = "INHEART"
self.addSubview(background)
self.addSubview(title)
}
override func layoutSubviews() {
background.snp.makeConstraints { make in
make.width.equalTo(ScreenWidth)
make.height.equalTo(BannerHeight)
make.left.top.right.equalTo(0)
}
title.snp.makeConstraints { make in
make.width.equalTo(100)
make.center.equalTo(background.snp.center)
}
}
}
class MainVC: UIViewController {
var bannerView:BannerView!
override func viewDidLoad() {
super.viewDidLoad()
bannerView = BannerView(frame: CGRect.zero)
view.addSubview(bannerView)
}
}
答案 0 :(得分:1)
您的属性似乎未初始化
var background: UIView!
var title: UILabel!
您应该在init方法中初始化这些
self.background = UIView()
self.title = UILabel()
如果对类属性使用强制解包,则必须在init方法中初始化。 XCode应该向你抱怨这个,你的错误信息应该显示类似的错误
答案 1 :(得分:1)
您没有初始化背景视图,请初始化它们
self.background = UIView()
self.title = UILabel()
如果您想使用xib创建自定义视图,请按照Custum View
进行操作答案 2 :(得分:0)
你必须首先初始化self.background = UIView()和self.title = UILabel()。
您可以在设置/分配值之前在setupSubviews()函数中初始化它们。