Обработка различий анимации ограничений AutoLayout в iOS 10?

def sublist(l1,l2):
    s1=" ".join(str(i) for i in l1)
    s2=" ".join(str(i) for i in l2)
    if s1 in s2:
        return True
    else:
        return False
29
задан Ben Guild 16 August 2016 в 02:21
поделиться

3 ответа

Попробуйте вызвать layoutIfNeeded для суперпредставления представления вместо самого представления.

-

У меня была похожая проблема, мой взгляд должен был анимироваться сверху на высоте 0, вниз до высоты> 0 (т.е. (0, 0, 320, 0) до ( 0, 0, 320, 44)).

При использовании Xcode 8 с iOS 10 поведение анимации сильно отличалось. Вместо анимации сверху вниз, анимация вверх и вниз от вертикального центра кадра назначения.

Я исправил это, вместо того, чтобы вызывать layoutIfNeeded для самого представления, вызывая его для суперпредставления представления. Каким-то образом поведение было восстановлено.

Надеюсь, это поможет!


Полезный комментарий @Ramiro:

Согласно документации, layoutIfNeeded выкладывает подпредставления (но не рассматривает текущий вид сам). Таким образом, чтобы обновить текущее представление, вам нужно вызвать layoutIfNeeded из суперпредставления.

90
ответ дан aksh1t 16 August 2016 в 02:21
поделиться

В следующем методе:

[super viewDidLoad];

Напишите эту строку:

 [self.view layoutIfNeeded];
2
ответ дан Sushil Sharma 16 August 2016 в 02:21
поделиться

Я сделал небольшой тест, изменив H и V маленького красного вида:

self.red_POS_H = NSLayoutConstraint.constraints(withVisualFormat: "H:|-90-[redView]", options: defaultOptions, metrics: nil, views: viewsDictionary)


self.red_POS_V = NSLayoutConstraint.constraints(withVisualFormat: "V:|-30-[redView]", options: defaultOptions, metrics: nil, views: viewsDictionary)

self.view.addConstraints(self.red_POS_V!)
self.view.addConstraints(self.red_POS_H!)

и анимировал его:

        // we hope is only one:
        let currV = self.red_POS_V![0]
        let currH = self.red_POS_H![0]


        UIView.animate(withDuration: 3) { 
            // Make all constraint changes here

            currV.constant = 100
            currH.constant = 300

            self.view.layoutIfNeeded() // Forces the layout of the subtree animation block and then captures all of the frame changes
        }

красный вид переместился правильно, если вы закомментировали один Линия в анимации, она работает, горизонтально или вертикально.

Небольшой проект доступен, если Вам это нужно.

0
ответ дан ingconti 16 August 2016 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: