【发布时间】:2015-11-06 14:55:11
【问题描述】:
我在使用 XCode 7.1 界面生成器时遇到了一个非常奇怪的问题。我有一个非常简单的 UIView 子类,在故事板编辑器中呈现良好:
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 实例:代理崩溃
我 100% 确定该初始化程序覆盖会使其崩溃,因为我已经复制了几次。如果我只注释掉它,它会再次起作用。
任何人都知道为什么会发生这种情况以及是否有办法修复/解决它?
【问题讨论】:
-
你试过不带参数的
init()吗? -
@Losiowaty UIView 据我记得根本没有定义
init()。而且,如果我理解得很好,界面构建器使用 init 和 coder 来初始化 View。