Проблемы со Swift, Auto Layout и представлениями стека

Я работал над приложением с сеткой кнопок. Сетка состоит из 4 кнопок в строке и (в настоящее время) 6 строк. В раскадровке каждый ряд кнопок находится в виде горизонтального стека, а все 6 представлений стека — в виде вертикального стека.

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

  1. Я хочу, чтобы все кнопки оставались одинакового размера, но если одна или несколько кнопок в данной строке/стеке скрыты, остальные кнопки в этой строке изменяют свои размеры, чтобы заполнить строку. Я предполагаю, что это решит комбинация ограничений на кнопки и настройки в представлении стека, но я пока не придумал правильную комбинацию.

  2. Если я начну, скажем, с первых трех рядов кнопок, а затем попытаюсь отобразить кнопку в одном из других рядов, все кнопки исчезнут. Однако, если я «распечатаю» состояние .isHidden каждой кнопки, те, которые должны быть видны, будут иметь .isHidden = false.

Любые идеи для решения любой из этих проблем?

Спасибо заранее за любую помощь.


person DJR    schedule 10.11.2018    source источник
comment
Пожалуйста, добавьте блок кода, который вы попробовали для подхода, чтобы сообщество могло помочь вам лучше.   -  person Akhilesh krishnan    schedule 10.11.2018
comment
Я не думаю, что это действительно проблема «кода». Я мог бы опубликовать цикл над набором кнопок выхода, установив button.isHidden = true/false, но похоже, что проблема связана с настройками автоматического макета и/или просмотра стека.   -  person DJR    schedule 12.11.2018
comment
@DJR - для вашего 1. вопроса.... покажите, что вы хотите, чтобы произошло. Если у вас есть 4 кнопки одинаковой ширины, и вы прячете/убираете 3-ю кнопку, как она должна выглядеть?   -  person DonMag    schedule 13.11.2018
comment
Для проблемы 1 я хочу, чтобы все 4 кнопки сохраняли одинаковый размер и положение.   -  person DJR    schedule 13.11.2018
comment
@DJR - Ты этого хочешь? 4 кнопки одинаковой ширины... удалить 3-ю кнопку, кнопки 1, 2 и 4 остаются с текущим размером и положением? imgur.com/a/mwp5TN3   -  person DonMag    schedule 13.11.2018
comment
Да, это точно.   -  person DJR    schedule 14.11.2018


Ответы (1)


Чтобы ответить на ваш первый вопрос...

Когда вы скрываете представление в UIStackView, автоматическая компоновка обрабатывает его так, как будто оно «исчезло» — стековое представление перекомпонует свое arrangedSubviews, как если бы этого представления никогда не было.

Если вы хотите получить этот результат:

введите здесь описание изображения

Лучше всего, вероятно, установить для свойства .alpha этого представления/кнопки значение 0. Он будет полностью невидимым (по сути, «скрытым»), а представление стека сохранит свой текущий макет. И элементы управления с .alpha = 0 не реагируют на прикосновения (поэтому вы не можете нажать на невидимую кнопку).

Что касается вашего второго вопроса, я бы рекомендовал вам повторно опубликовать этот вопрос отдельно. Обязательно включите код, который вы используете, который не дает желаемого результата.

См.: Как спросить

person DonMag    schedule 14.11.2018
comment
Спасибо за это, @DonMag. Прошлой ночью я пришел к аналогичному выводу, установив прозрачный цвет фона кнопки. После перехода на этот подход вторая проблема перестала возникать, но я собираюсь провести дополнительное тестирование, чтобы убедиться. - person DJR; 14.11.2018