这是与this类似的问题,但不完全相同。
我创建了一个UITableViewCell的子类,它引用了一个自定义的nib并将其标记为@IBDesignable。代码和.xib文件中的更改在模拟器和设备中正确显示,但不在故事板中显示。
import UIKit
@IBDesignable class TextFieldTableViewCell: UITableViewCell {
var view: UIView!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setup()
}
func setup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
contentView.addSubview(view)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "TextFieldTableView", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
}
故事板显示永久性的“Designables Updating”。
将问题分解为仅对UITableViewCell进行子类化并将其标记为@IBDesignable的不太复杂的测试,会导致相同的永久性“Designables Updating”。
import UIKit
@IBDesignable class TextFieldTableViewCell: UITableViewCell {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
}
是否有人成功创建了@IBDesignable UITableViewCell子类?这发生在Xcode 7 beta 6和beta 5中。
答案 0 :(得分:6)
此问题自Xcode 9起已解决。
我曾向Apple报告此问题,至少知道这是一个已知错误。它目前是问题ID 17973876下的一个未决问题。
编辑:截至2016年12月7日,此错误仍标记为已打开。
答案 1 :(得分:1)
我遇到了类似的问题。这个帖子帮助我理解了这个问题:Is there a way for Interface Builder to render IBDesignable views which don't override drawRect:
我通过添加
来实现它override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
layoutSubviews()
}
据我所知,在阅读上述堆栈链接后,IBDesignable不是从nib或编码器加载错误板中的nib,而是从 init加载框架。不太确定,但我认为init风格也在做类似的事情。
答案 2 :(得分:0)
似乎只有在单元格位于故事板内时才会发生“更新”错误。当您为单元格创建特殊的.xib文件时,一切正常。
希望他们能尽快解决。