Анимиране на промяна на ограничение (втори елемент) с помощта на Swift?

Дефинирах ограничение в IB, както е показано по-долу. Как мога програмно да анимирам промяната на „Втория елемент“ в това ограничение към различен обект (ефективно преместване на първия елемент нагоре по екрана).

въведете описание на изображението тук

Ето кода, който опитах - където "categoryTableViewTop" е NSLayoutConstraint. Получавам грешката „Не може да се присвои към резултата от този израз“.

func expandCategory(button: UIButton) {
    tableView2.animateWithDuration(0.5, animations: {
       categoryTableViewTop.secondItem = categoryHeader.top
    })
}

person vk2015    schedule 04.08.2015    source източник


Отговори (2)


Вие не променяте константите на ограниченията във вашия код. Трябва да го промените така:

categoryTableViewTop.secondItem.constant = categoryHeader.top.constant

Предполагам, че secondItem и top са IBOutlets от ограничения

За да анимирате промяна на ограничение, трябва да го направите по следния начин:

self.view.layoutIfNeeded()
UIView.animateWithDuration(5, animations: { _ in
        // change your constraints here
        myTopConstraint.constant = 50.0
        self.view.layoutIfNeeded()
    }, completion: nil)

За повече информация прочетете този отговор или този ръководство от документите.

person ezcoding    schedule 04.08.2015
comment
Благодаря, но не искам да променям константите на ограниченията, искам да променя елементите/обектите на ограниченията. Така че categoryTableViewTop е IBOutlet от ограничения. - person vk2015; 05.08.2015
comment
Ако искате да преместите нещо на екрана, както казахте във вашия въпрос, ще трябва да актуализирате константните стойности на ограничението. Не можете просто да присвоите един търговски обект на друг и да се надявате да получите същите резултати. Ограниченията се изчисляват, затова трябва да зададете изчислената стойност, а не самия обект. - person ezcoding; 05.08.2015

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

Не съм пробвал това с анимации, но с други динамични оформления е възможно да се създадат две различни ограничения с различни secondItems в създателя на интерфейса и да се променят техните приоритети в кода. Можете да опитате, ако същият подход работи с анимации.

Използвайте приоритети 750 и 250, тъй като тези ограничения се третират като незадължителни.

person liitokone    schedule 09.03.2017
comment
Използвайте приоритети 750 и 250, тъй като тези ограничения се третират като незадължителни. е правилното решение - person ; 21.06.2018