Обновите ограничение раскадровки, используя код

У меня есть UIImage в коде, который я хотел бы увеличить по вертикали при нажатии кнопки. UIImage полностью ограничен в раскадровке, и я хотел бы изменить его высоту при нажатии кнопки.

Я связал UIImage и его ограничение по высоте в коде:

    @IBOutlet weak var botBotCons: NSLayoutConstraint!
    @IBOutlet weak var botBot: UIImageView!

затем

@IBAction func testButton(sender: UIBarButtonItem) {
    println("testButton pressed")
    self.botBotCons.constant = 68   //or +=62 as its current constant is 6
    self.view.layoutIfNeeded()
}

Я получаю сообщение testButton в консоли, но размер изображения не изменяется. Что я делаю неправильно? Нужно ли что-то менять в раскадровке?

1 ответ

Решение

Вам следует позвонить layoutIfNeeded в блоке анимации. Apple фактически рекомендует вызывать его один раз перед блоком анимации, чтобы убедиться, что все ожидающие операции макета завершены. Я только что проверил с изменением размера кнопки - все работает отлично.

@IBOutlet weak var myBtn: UIButton!
@IBOutlet weak var btnHeight: NSLayoutConstraint!
@IBOutlet weak var btnWidth: NSLayoutConstraint!


@IBAction func resizeBtn(sender: AnyObject) {
    self.myBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)

    self.view.layoutIfNeeded()
    self.btnHeight.constant += 50
    self.btnWidth.constant += 50

    UIView.animateWithDuration(0.7, animations: {
        self.view.layoutIfNeeded()
    })
}

PS убедитесь, что другие ограничения не блокируют ваши изменения.

Другие вопросы по тегам