我有一个XCode 7.1界面生成器很奇怪的问题。我有一个非常简单的UIView子类,这使得在故事板编辑罚款:UIView初始化覆盖导致IBDesignable崩溃
import UIKit
@IBDesignable
class DashboardHeaderView: UIView {
@IBInspectable
var maskClipHeight: CGFloat = 40.0
override func layoutSubviews() {
super.layoutSubviews()
self.setMask()
}
private func setMask() {
let mask = CAShapeLayer()
mask.path = self.createMaskPath()
self.layer.mask = mask
}
private func createMaskPath() -> CGPath {
let maskPath = UIBezierPath()
maskPath.moveToPoint(CGPoint(x: bounds.minX, y: bounds.minY))
maskPath.addLineToPoint(CGPoint(x: bounds.maxX, y: bounds.minY))
maskPath.addLineToPoint(CGPoint(x: bounds.maxX, y: bounds.maxY - self.maskClipHeight))
maskPath.addLineToPoint(CGPoint(x: bounds.minX, y: bounds.maxY))
maskPath.closePath()
return maskPath.CGPath
}
}
但是,如果我只添加初始化覆盖到它:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
它失败,错误:
- 错误:IB Designables:无法更新自动布局状态:代理程序崩溃
- er ror:IB Designables:无法呈现DashboardHeaderView的实例:代理程序崩溃
我100%确定初始化器重写使它崩溃,因为我已经重现了它几次。如果我只评论它,它会再次运作。
任何人都有任何想法,为什么发生这种情况,如果有办法修复/解决方法呢?
您是否尝试过使用'init()'而不使用参数? – Losiowaty
@Losiowaty UIView根本没有定义'init()',据我所知。而且,如果我理解的很好,界面构建器会使用init和编码器来初始化View。 –