IBDesignable 永远不会完成故事板中 UITableViewCell 的更新
IBDesignable never finishes updating UITableViewCell in storyboard
这是一个与 this 相似但又不完全相同的问题。
我创建了一个 UITableViewCell 的子类,它引用了一个自定义笔尖并将其标记为@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 中。
我遇到了类似的问题。这个线程帮助我理解了这个问题: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()
}
据我阅读上述堆栈 link 后的理解,IBDesignable 不是从 nib 或编码器而是从 init with frame 加载情节提要中的 nib。不太确定,但我认为 init with style 正在做类似的事情。
此问题已于 Xcode 9 日解决。
我已将此问题报告给 Apple,并且至少知道这是一个已知错误。目前是问题 ID 17973876 下的未解决问题。
编辑:截至 2016 年 12 月 7 日,此错误仍标记为未解决。
似乎 "Updating" 错误仅在单元格位于情节提要内时才会发生。当您为单元格创建特殊的 .xib 文件时一切正常。
希望他们能尽快解决。
这是一个与 this 相似但又不完全相同的问题。
我创建了一个 UITableViewCell 的子类,它引用了一个自定义笔尖并将其标记为@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 中。
我遇到了类似的问题。这个线程帮助我理解了这个问题: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()
}
据我阅读上述堆栈 link 后的理解,IBDesignable 不是从 nib 或编码器而是从 init with frame 加载情节提要中的 nib。不太确定,但我认为 init with style 正在做类似的事情。
此问题已于 Xcode 9 日解决。
我已将此问题报告给 Apple,并且至少知道这是一个已知错误。目前是问题 ID 17973876 下的未解决问题。
编辑:截至 2016 年 12 月 7 日,此错误仍标记为未解决。
似乎 "Updating" 错误仅在单元格位于情节提要内时才会发生。当您为单元格创建特殊的 .xib 文件时一切正常。
希望他们能尽快解决。