IBDesignable никогда не завершает обновление UITableViewCell в раскадровке
Этот вопрос аналогичен этому, но не совсем то же самое.
Я создал подкласс 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
}
}
Раскадровка отображает постоянное "обновление конструктивных элементов".
Разбиение задачи на менее сложные проверка только подклассов UITableViewCell и маркировка его как @IBDesignable приводит к тому же постоянному "обновлению Designables".
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.
3 ответа:
Эта проблема была решена с Xcode 9.
Я сообщил об этой проблеме в Apple и, по крайней мере, знаю, что это известная ошибка. В настоящее время это открытый вопрос под номером проблемы 17973876.
Edit: начиная с 27.12.2016 эта ошибка по-прежнему помечена как открытая.
У меня были похожие проблемы. Этот поток помог мне понять проблему: Есть ли способ для Interface Builder визуализировать IBDesignable представления, которые не переопределяют drawRect:
Я заставил его работать, добавив
override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) layoutSubviews() }
Насколько я понял после прочтения приведенной выше ссылки на стек, IBDesignable загружает перо в раскадровку не из пера или из кодера, а изinit with frame . Не слишком уверен, но я думаю, что init со стилем делает то же самое.