Ответ 1
Свойства topLayoutGuide
и bottomLayoutGuide
наследуются от UIViewController и реализуют UILayoutSupport. Они предназначены для использования с AutoLayout
, но могут также использоваться напрямую без использования AutoLayout
.
В случае topLayoutGuide
свойство указывает наивысшую вертикальную область содержимого, которую вы не хотите отображать за прозрачной или прозрачной панелью UIKit (например, статус или панель навигации). Итак, если ваш контроллер представления был помещен в стек UINavigationController
, topLayoutGuide
сообщит вам, сколько точек в верхней части экрана находится строка состояния и панель навигации. Вы можете использовать это значение для прокрутки содержимого в UIScrollView
только под панелью навигации или убедиться, что другой контент в вашем представлении не покрывается UINavigationBar
.
Имейте в виду, что значение topLayoutGuide
зависит от контроллера просмотра и от того, содержалось ли оно в другом контроллере представления. Из документации Apple UIViewController
:
Объект, который сдерживает значение для этого свойства, зависит от независимо от того, является ли контроллер представления дочерним элементом представления контейнера контроллер (например, контроллер навигационной панели или панели вкладок) следующим образом:
• Контроллер представления не находится в пределах ограничений контроллера контейнера это свойство указывает нижнюю часть строки состояния, если она видна, или иначе указать верхний край представления контроллера вида.
• Контроллер вида в контроллере представления контейнера не устанавливает этот стоимость имущества. Вместо этого контроллер контроллера контейнера ограничивает значение, указывающее:
Нижняя часть панели навигации, если отображается панель навигации
Нижняя часть строки состояния, если только отображается строка состояния
Верхний край представления контроллеров представления, если ни строка состояния, ни панель навигации не видны.
Вот фрагмент кода, который я использую для перемещения UITextField
в ответ на показ клавиатуры. Я перемещаю текстовое поле чуть ниже навигационной панели.
CGFloat length = self.topLayoutGuide.length;
_feedback.frame = CGRectMake(_feedback.frame.origin.x, length + 5.0, _feedback.frame.size.width, _feedback.frame.size.height);
Использование bottomLayoutGuide
в точности похоже на использование topLayoutGuide
, за исключением того, что bottomLayoutGuide
относится к наименьшей вертикальной протяженности для контента.