Ошибка вращения/ограничения UIStackView

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

Я проверил с помощью Reveal, чтобы убедиться, что представление стека расположено правильно, и это так.

В представлении стека у меня есть несколько представлений, и для выравнивания представления стека установлено значение «Заполнить», чтобы гарантировать, что они расширяются, чтобы заполнить ширину представления стека. Это работает правильно, за исключением...

Когда я поворачиваю устройство, затем поворачиваю обратно в исходную ориентацию. Тогда представление стека позиционируется правильно, однако представления внутри него — нет. Вместо того, чтобы заполнять представление стека, они оставляют зазор сбоку. Обычно где-то между 20 и 50 баллами. Но всегда одна и та же сумма на одном и том же устройстве.

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

override func viewDidLayoutSubviews() {
    sliders.alignment = UIStackViewAlignment.Bottom
    sliders.alignment = UIStackViewAlignment.Fill
}

Кажется, это пинает представление стека и заставляет его правильно перекомпоновывать представления. Но по ощущениям довольно липкий.

Кто-нибудь сталкивался с этой ошибкой и нашел лучшее решение?

Я пробовал все это вокруг setNeedsLayout(), setNeedsDisplay() и т. д., и т. д. Но пока только приведенный выше код устранил проблему.


person drekka    schedule 09.12.2015    source источник


Ответы (2)


Возможно, вы захотите проверить свою консоль при первом повороте и/или первом повороте обратно в исходную ориентацию. В моем случае я получил сообщение об ошибке о конфликтующих ограничениях, и iOS нарушила одно из моих ограничений (что является поведением по умолчанию в случае конфликтующих ограничений).

Кроме того, проверьте, не добавили ли вы случайно константу ограничения для другого класса размера в какое-либо из ваших ограничений. Это происходит со мной довольно часто, когда я забываю поместить раскадровку в класс w: Any h: Any.

person guido    schedule 31.12.2015

Хорошо, проблема, похоже, исчезла с последними SDK. Так должно быть, было исправлено Apple.

person drekka    schedule 06.01.2016