Что такое _UILayoutGuide?

Мне нужно знать о _UILayoutGuide, как это, что он делает и почему он присутствует в иерархии UIView как subview почти всегда frame = (0,0,0,0).

Ответ 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.

Источник: