IBDesignable никогда не заканчивает обновление UITableViewCell в раскадровке

Это аналогичный вопрос , но не совсем тот же.

Я создал подкласс 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".

Обновление конструкторов

Преодоление проблемы в менее сложное испытание только подклассификации UITableViewCell и ее маркировка как @IBDesignable приводит к тому же постоянному "Обновлению конструктивных элементов".

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.

Ответ 1

Эта проблема была решена с Xcode 9.

Я сообщил об этой проблеме Apple и, по крайней мере, подумал, что это известная ошибка. В настоящее время проблема открыта под проблемой ID 17973876.

Изменить: по состоянию на 12/7/2016 эта ошибка по-прежнему отмечена как открытая.

Ответ 2

У меня были подобные проблемы. Эта тема помогла мне разобраться в проблеме: Есть ли способ для Interface Builder визуализировать представления IBDesignable, которые не переопределяют drawRect:

Я получил его для работы, добавив

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        layoutSubviews()
    }

насколько я понимаю после прочтения вышеупомянутой ссылки стека, IBDesignable загружает nib в раскадровку не из nib или из кодера, а из init с фреймом. Не слишком уверен, но я думаю, что стиль со стилем делает аналогичную вещь.

Ответ 3

Кажется, что ошибка "Обновление" происходит только тогда, когда ячейка находится внутри раскадровки. Все работает нормально, когда вы создаете специальный .xib файл только для ячейки.

Надеюсь, они скоро исправят это.