Сбой во время разработки при использовании программных ограничений и @IBDesignable

Я крутил свои колеса в течение нескольких дней на этом. Я не могу найти никаких демонстраций программных ограничений с @IBDesignable.

  1. Если я попробую imgv.translatesAutoresizingMaskIntoConstraints = false. Затем устанавливается очевидный бесконечный цикл, и мне буквально нужно выйти из Xcode, снова открыть его и быстро удалить до того, как наступит время разработки.

  2. Как сейчас написано, у меня есть ограничения, которые должны изменить размер imgv на ширину и высоту 200, но изменение значений на 300 не влияет на раскадровку. Таким образом, как будто ограничения не имеют никакого эффекта.

ВОПРОС: Как я могу создать программные ограничения, которые будут отображаться на раскадровке, используя @IBDesignable?## Заголовок ##

import UIKit

@IBDesignable
class tryTVCellTableViewCell: UITableViewCell {

    override func prepareForInterfaceBuilder() {
        setProperties()
    }

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

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setProperties()
    }

    public override func layoutSubviews() {
        super.layoutSubviews()
        setProperties()
    }

    func setProperties() {
        backgroundColor = .blue
        let imgv = UIImageView(frame: CGRect(x: 10, y: 20, width: 50, height: 50))
        let bundle = Bundle(for: type(of: self))
        let img = UIImage(named: "mountain", in: bundle, compatibleWith: traitCollection)
        assert(img != nil)
        imgv.image = img
        imgv.backgroundColor = .green
        let lab = UILabel(frame: CGRect(x: 100, y: 10, width: 300, height: 300))
        lab.text = "hkjlkjlkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;lkj;l;lkjk;j;i"
        addSubview(imgv)
        addSubview(lab)


        imgv.widthAnchor.constraint(equalToConstant: 200).isActive = true
        imgv.heightAnchor.constraint(equalToConstant: 200).isActive = true
        imgv.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true

    }
}

person user9661174    schedule 03.05.2018    source источник
comment
перейдите по этому пути ~/Library/Logs/DiagnosticReports и найдите имя файла IBDesignablesAgentCocoaTouch_*.crash , добавьте в свой вопрос Thread Crashed   -  person a.masri    schedule 03.05.2018
comment
Спасибо. Я видел это из аналогичного вопроса. В каталоге DiagnosticReports не было сбоев. :( Похоже больше зависает, чем крашится.   -  person user9661174    schedule 03.05.2018
comment
Проблема, с которой вы столкнулись в этой строке let bundle = Bundle(for: type(of: self)) let img = UIImage(named: "mountain", in: bundle, compatibleWith: traitCollection), заключается в использовании UIImage(named:"mountain") из активов   -  person a.masri    schedule 03.05.2018
comment
О, странно. Эта часть не была проблемой. Однако, когда я добавляю translatesAutoresizingMaskIntoConstraints = false, он внезапно работает (оставляя изображение внутри или снаружи). Должен ли я удалить этот вопрос?   -  person user9661174    schedule 04.05.2018
comment
Не удалять, а поставить правильный ответ и поставить галочку зеленую :)   -  person a.masri    schedule 04.05.2018
comment
@a.masri, вы должны опубликовать ответ, так как вы исправили проблему OP (и получите за это репутацию!)   -  person LinusGeffarth    schedule 04.05.2018
comment
@LinusGeffarth Он говорит, что решил проблему, и я сказал ему добавить правильный ответ :)   -  person a.masri    schedule 04.05.2018


Ответы (1)


Просто попробуйте добавить еще раз

 imgv.translatesAutoresizingMaskIntoConstraints = false

после

addSubview(lab)

до

imgv.widthAnchor.constraint(equalToConstant: 200).isActive = true

Он должен работать.

person ScottyBlades    schedule 03.05.2018