2017-02-16 2 views
0

Что у меня есть:программно изменить ALIGMENT в виде UIStackView не работает должным образом

Это моя иерархия просмотров:

  • кнопка под названием b1, которая имеет действие под названием «changeAlignment», что активируется При касании вверх внутрь.
  • UIView с именем Pview с рамкой (0,100,414,100).
    • горизонтальный UIStackView с именем S1, с параметром выравнивания, заданным как «центр». Этот стек будет привязан к границам pView.
      • горизонтальный UIStackView с именем S2 с атрибутом выравнивания, заданным как «Заполнить» и который имеет две метки.

Что я хочу сделать:

Я хочу изменить выравнивание S1 от "центра" в "Top", когда я прикасаюсь к кнопке b1.

То, что я пытался

- (void) changeAlignment { 
    NSLog(@"P-%li",(long)S1.alignment); 
    S1.alignment = UIStackViewAlignmentTop; 
    NSLog(@"P-%li",(long)S1.alignment); 
    [pView layoutIfNeeded]; 
} 

Это кажется очевидным, но это не работает !!. Самое забавное, что он работает в какое-то время, но внезапно он перестает работать. Теперь, когда я нажимаю b1, выравнивание S1 изменяется, но визуально оно не изменяется вообще.

Я пытаюсь использовать [self.view setNeedsLayout] [self.view layoutIfNeeded] и даже [S1 layoutIfNeeded], и ни у кого из них нет работы.

Что я делаю неправильно? .. Как даже возможно, что он действительно работает и вдруг перестает работать !! ??

Может кто-нибудь, пожалуйста, помогите мне? ... это сводит меня с ума.

+0

@coverback вы можете помочь мне решить эту проблему? – Airel

ответ

0

Я думаю, что ответ такой же, как и в How to programmatically animate the alignment property of an UIStackView in ios 9.

Пояснения к этому поведению следующие: (1) stackView автоматически генерирует необходимые ему ограничения для компоновки его организованных подсмотров, (2) определения горизонтального представления стека S1 с другим стеке S2 как упорядоченного подсмотра S1 , заставьте S1 создать некоторые ограничения, которые (а) не будут затронуты, (b) не пересчитаны или (c) не будут пересчитаны, но остаются неизменными, когда вы изменили свойство выравнивания S1 от центра до верха и наоборот. Таким образом, поскольку автоматически сгенерированные ограничения S1 не влияют или они не меняются вообще после изменения свойства выравнивания, пользовательский интерфейс не отражает никаких изменений, и анимация также отсутствует. Если кто-нибудь придумал другое объяснение, дайте мне знать об этом.

Смежные вопросы