我在使用XCode 7.1的界面设计器时遇到了一个非常奇怪的问题。我有一个非常简单的UIView子类,在stroyboard编辑器中渲染正常:
然而,如果我只是对它添加初始化程序覆盖:
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:无法更新自动布局状态:代理崩溃
- 错误:IB Designables:无法呈现DashboardHeaderView的实例:代理崩溃
我非常确定,覆盖初始化器导致了这个崩溃,因为我已经重现了几次。如果只是将其注释掉,它就能正常工作。
是否有人知道发生这种情况的原因,是否有方法可以修复/解决它?
init()
吗? - Losiowatyinit()
。而且,如果我理解正确的话,界面构建器使用init with coder
来初始化视图。 - Igor Pantović