Мне нужно знать о _UILayoutGuide
, как это, что он делает и почему он присутствует в иерархии UIView
как subview
почти всегда frame = (0,0,0,0)
.
Что такое _UILayoutGuide?
Ответ 1
UILayoutGuide
обычно упоминается как -topLayoutGuide и -bottomLayoutGuide, на самом деле это не ограничения, но они являются элементами представления, соответствующими протоколу UILayoutSupport
.
Подробнее об этом протоколе вы найдете здесь. Значение часто равно 0, но вы должны уделять много внимания, когда задаете размер.
Ответ 2
Это частный класс Apple, который используется для topLayoutGuide
и bottomLayoutGuide
, когда включена автоматическая компоновка. Если ваша панель навигации непрозрачна, один из этих "представлений" будет находиться в [0,0]. Если ваши навигационные полосы являются полупрозрачными, то те же view
обычно будут в [0,64] в портрете (20 пунктов для строки состояния + 44pt для панели навигации). Аналогичная для нижней панели инструментов есть, если она есть.
Причина, по которой это делается, заключается в том, что вы можете определить ограничения макета, которые работают с объектами UIView
.
Одно замечание, если у вас есть какая-то логика, которая работает на subviews, будьте осторожны, чтобы не включать их в свои вычисления. Вы можете игнорировать их путем тестирования:
[subview conformsToProtocol:@protocol(UILayoutSupport)]
В iOS 9 существует новый закрытый класс _UILayoutSpacer
, который не является потомком UIView
, но может использоваться для установки ограничений. Кажется, что система работает в двойном режиме, где контроллеры, загруженные из xibs и раскадровки, по-прежнему используют _UILayoutGuide
, а контроллеры, созданные в коде, настраиваются с помощью _UILayoutSpacer
.
Ответ 3
UILayoutGuides
UILayoutGuides
представляют прямоугольник в макете. Они не будут отображаться в иерархии представлений, но могут использоваться как элементы в NSLayoutConstraint
.
iOS 9
В iOS 9 Apple предлагает новый улучшенный способ управления отрицательным пространством, называемым UILayoutGuide
. A UILayoutGuide
или руководство по расположению, - пустой прямоугольник в макете, против которого могут применяться ограничения для определения его отношения к другим UILayoutGuides
или UIViews
.
UILayoutGuides
dont имеют иерархию, и они не являются частью иерархии представлений. Они принадлежат UIView, но они не могут иметь UIView
или другой UILayoutGuide
. UILayoutGuides не содержат CALayer
, и они не являются UIResponder
. Это означает, что на этап рендеринга не добавлен накладной чертеж, добавив UILayoutGuide
, и нет никакого влияния на процесс обработки UIEvent
, имея UILayoutGuide
.
Источник:
- UILayoutGuide - Автоматические макеты Невидимые помощники
- UILayoutGuide.h