我做了一个自定义xib,我之前在我的故事板中使用过,我想简单地创建一个自定义视图调整大小的实例,然后将其作为子视图添加到uiscrollview。我试过在视图控制器的viewdidload函数中使用这段代码
let cardView = CardView(coder: NSCoder())
cardView!.frame.size.width = 100
cardView!.frame.size.height = 100
scrollView.addSubview(cardView!)
但是我得到了这个错误
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -containsValueForKey: cannot be sent to an abstract object
of class NSCoder: Create a concrete instance!'
编辑:这是连接到CardView.xib
的swift文件的代码import UIKit
class CardView: UIView {
@IBOutlet var view: UIView!
@IBOutlet weak var cornerView: UIView!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("CardView", owner: self, options: nil)
self.addSubview(view)
view.frame = self.bounds
cornerView.layer.cornerRadius = 3
cornerView.layer.masksToBounds = true
view.layer.shadowOffset = CGSizeMake(1, 5);
view.layer.shadowRadius = 2;
view.layer.shadowOpacity = 0.2;
view.layer.masksToBounds = false
}
}
而不是使用自动布局,我尝试简单地设置高度和宽度来测试手动添加子视图从这2行(也只是一个头,我是新的iOS开发)
cardView!.frame.size.width = 100
cardView!.frame.size.height = 100
在使用自定义XIB进行视图初始化的情况下,我所使用的如下:
在视图的类中比如你的CardView代码是这样的
class CardView: UIView {
@IBOutlet weak var cornerView: UIView!
func setupWithSuperView(superView: UIView) {
self.frame.size.width = 100
self.frame.size.height = 100
superView.addSubview(self)
cornerView = UIView(frame: self.bounds)
cornerView.layer.cornerRadius = 3
cornerView.layer.masksToBounds = true
view.layer.shadowOffset = CGSizeMake(1, 5);
view.layer.shadowRadius = 2;
view.layer.shadowOpacity = 0.2;
view.layer.masksToBounds = false
}
}
,当你调用这个类进行初始化时,使用this。
let cardView = NSBundle.mainBundle("CardView").loadNibNamed("", owner: nil, options: nil)[0] as! CardView
cardView.setupWithSuperView(scrollView)
试一次。但要确保xib文件的第一个视图是CardView类型。第一个视图的类是CardView。