Почему я не могу H-Centering и дать фиксированную ширину элементу внутри StackView

Моя проблема все время заключается в том, как центрировать один элемент внутри представления стека

Пожалуйста, посмотрите на мои скриншоты ниже, чтобы объяснить:

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

№1) Является основным StackView

Номер 2) Является ли соответствующий StackView, содержимое которого я хочу сделать ( UIView в № 3 ), центрирующимся внутри него.

Номер 3) Этот UIView я хочу центрировать внутри № 2 и придать ему меньшую ширину, соответствующую синей линии на картинке.

Примечание. Проблема заключается в том, что когда я задаю фиксированную ширину UIView в № 3, это всегда влияет на вид прокрутки за основным StackView и уменьшает его!

Ниже приведена конфигурация основного StackView в №1.

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

Ниже приведена конфигурация дополнительного StackView в № 2.

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

Как я уже сказал, когда я задаю фиксированную ширину UIView в № 3, он всегда сжимается и повреждает scrollView, который находится в фоновом режиме приложения.

Так вы можете помочь, как справиться с этой проблемой, пожалуйста?


person Let.Simoo    schedule 20.06.2020    source источник
comment
Вы хотите, чтобы зеленый вид содержал две кнопки? И вы хотите, чтобы зеленый вид был шириной двух кнопок? И вы хотите, чтобы он был центрирован по горизонтали?   -  person DonMag    schedule 23.06.2020
comment
Да, именно этого я и хочу! @ДонМаг   -  person Let.Simoo    schedule 27.06.2020


Ответы (1)


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

Что вы, вероятно, захотите сделать, так это встроить горизонтальное представление стека (содержащее две кнопки) в зеленое представление, а не наоборот (как сейчас).

Попробуйте это так:

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

Настройки основного стека:

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

Настройки BtnsStack (думаю, вам нужно пространство между кнопками — я использовал 8):

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

Вот как это выглядит во время выполнения с зеленым фоном BtnsStackHolderView, установленным для очистки:

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

и, повернув, чтобы показать, что кнопки остаются центрированными по горизонтали:

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


Изменить как центрировать зеленое представление внутри stackView, не встраивая его в другое представление?

Причина, по которой ваше зеленое представление не центрировано в представлении стека, заключается в том, что Alignment вашего представления стека установлено на Fill, что растягивает упорядоченные подпредставления, чтобы заполнить ширину представления стека.

Для представления стека с осью Vertical параметры выравнивания следующие:

  • Наполнять
  • Ведущий
  • Центр
  • Трейлинг

Вот пример с Center (само представление стека ограничено верхним/начальным/конечным 40 пунктами от краев):

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

Начиная снизу...

Синий wEqToStack h60 вид ограничен:

  • высота = 60
  • ширина равна ширине представления стека

Желтый w200 h60 вид ограничен:

  • ширина = 200
  • высота = 60

Оранжевый вид wNone h60 ограничен:

  • width = ограничение ширины не задано
  • высота = 60

И зеленый BtnsStackHolderView не имеет ограничений по ширине или высоте... его размер определяется ограничениями на его содержимое (BtnsStack с 20 точками с каждой стороны).

Если мы запустим это, мы увидим (красная пунктирная линия просто показывает кадр представления стека):

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

Упс! Куда делся оранжевый взгляд? Поскольку мы не устанавливали ограничение ширины, а Alignment представления стека установлено на Center, в итоге ширина равна нулю.

Таким образом, если у большинства представлений в вашем представлении стека определена собственная ширина, использование center уменьшает количество необходимых содержащих представлений. Но если большинству представлений необходимо растянуть ширину представления стека, вероятно, будет проще встроить контент, который вы хотите центрировать, в содержащие представления.

person DonMag    schedule 27.06.2020
comment
Нет, на самом деле я хочу, чтобы вид зеленого цвета был также центрирован с интервалом вокруг... что я сделал: я опустошил зеленый вид внутри вида, затем я центрировал его, а затем скрыл вид сзади, установив чистый цвет на фоне... - person Let.Simoo; 28.06.2020
comment
Но мой вопрос: как центрировать зеленый вид внутри stackView, не встраивая его в другой вид?? - person Let.Simoo; 28.06.2020
comment
@ Let.Simoo - см. редактирование моего ответа для объяснения. - person DonMag; 28.06.2020
comment
Вау, какой подробный и отличный ответ ... Спасибо за хорошее объяснение, мой друг. Я очень ценю ваши усилия - person Let.Simoo; 02.07.2020
comment
Итак, насколько я понимаю... с опцией заполнения по центру мы должны указать либо фиксированную ширину, либо точки из ограничения ведущего / конечного, верно? - person Let.Simoo; 02.07.2020
comment
для оранжевого случая.. он исчез, потому что нет фиксированной ширины или указаний на заданное ограничение... верно? Таким образом, ширина и ограничения являются обязательными для опции Center Fill! - person Let.Simoo; 02.07.2020
comment
@Let.Simoo — представления стека упорядочивают свои подпредставления. Вы бы не давали ограничения для начального/конечного вывода, потому что вы указываете представлению стека центрировать этот элемент по горизонтали. Вы либо даете ему постоянную ширину, либо пропорциональную ширину (например, равную ширине представления стека с множителем 0,8, чтобы сделать его 80% ширины). Если в представлении Orange есть внутренний размер содержимого, например UILabel, вам не нужно накладывать на него какие-либо ограничения. Примечание: зеленый BtnsStackHolderView не имеет ограничений по ширине или высоте... его размер определяется ограничениями на его содержимое - person DonMag; 02.07.2020
comment
Понял, мой друг, еще раз спасибо за разъяснение!.... и, пожалуйста, если вы нашли мой вопрос полезным для других, пожалуйста, поддержите меня и проголосуйте за него, потому что я хочу разблокировать следующий уровень в моей учетной записи! - person Let.Simoo; 03.07.2020