Проблема с автопоставкой при высоте клавиатуры и элементов интерфейса - PullRequest
0 голосов
/ 01 июля 2019

Swift 5, Xcode 10

Макет моего UIViewController:

enter image description here

Я использую это код для увеличения Server Text Field при открытой клавиатуре.

Сначала он выдвигал нижний UIStackView в верхний, поэтому я добавил ограничение Server Stack View.top >= Username Stack View.bottom + 20, и теперь оно сохраняет правильное значение.distance.

НО теперь он также автоматически уменьшает высоту Server Text Field при нажатии вверх.Придание Server Stack View фиксированной высоты 60,5 см нажимает кнопку «Войти», поэтому я установил высоту Username Stack View на фиксированную 110,5, что ничего не изменило.

Я попытался изменить Vertical Content Compression Resistance Priority из нескольких элементов пользовательского интерфейса до 999, но всегда есть один элемент пользовательского интерфейса, высота которого уменьшается.

Как видно на этом снимке экрана, над клавиатурой достаточно места:

enter image description here

Как сделать так, чтобы в автоматическом макете использовалось это пространство вместо "скрывающих" элементов пользовательского интерфейса?

Редактировать:

Я нашелЧто это за дополнительное пространство: это высота метки «версия» и ее ограничение (в моем случае 30 пунктов внизу экрана).К сожалению, я пока не смог избавиться от этого - кроме удаления ярлыка, который все еще не останавливает «улыбку».

1 Ответ

0 голосов
/ 08 июля 2019

Дополнительное пустое пространство над клавиатурой соответствует высоте метки «версия» и ее ограничению (в моем случае - 30 пунктов до нижней части экрана).

«Сжатие» как-то вызвано ограничением centerY - 120 для UIStackView, и даже изменение «Приоритета сопротивления сжатию содержимого» не сработало. Кроме того, если есть окружение UIScrollView, оно жалуется на отсутствующее ограничение для "y position" (даже если другие ограничения установлены правильно).

К сожалению, единственное найденное мной исправление, которое работает для обеих проблем, - это устранить причину и изменить макет. : /

Чем я закончил:

enter image description here

Несколько вещей, на которые стоит обратить внимание:

  • Child View был добавлен, чтобы всегда держать ярлык «версия» внизу экрана - даже когда клавиатура активна.
  • Login View использует класс KeyboardLayoutConstraint для своего "нижнего" ограничения. Без этого прокрутка была бы полностью отключена.
  • Размер Stack View устанавливается через метки и текстовые поля внутри.
  • Необходимо добавить два дополнительных UIStackView и UIView s (1x имя пользователя, 1x сервер), чтобы поддерживать ширину 200 для UITextFields, но при этом окружающие UIStackView и UIScrollView используют ведущие / конечные ограничения 0 пунктов. Без этого расположение по горизонтали не слипалось, Xcode жаловался, и UIScrollView был довольно узким, что также означало, что невозможно прокрутить по бокам.
  • Ограничение «top + 100» (Stack View) отображается даже тогда, когда клавиатура поднята, а UIScrollView прокручиваемым. Я знаю, что это не красиво, но это единственное решение, которое я нашел, которое не привязывает текстовые поля к верхней части представления, так как «середина - 100» не работает. Вероятно, можно избавиться от него, изменив класс KeyboardLayoutConstraint.
...