Что такое UILayoutGuide?

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

3 ответов


UILayoutGuide обычно упоминается-topLayoutGuide и-bottomLayoutGuide, это не ограничения, но они являются элементами представления, соответствующими протоколу под названием UILayoutSupport.

вы можете найти больше информации об этом протоколе здесь. Значение часто 0, но вы должны обратить много внимания, где вы спрашиваете их в размере.


это частный класс Apple, который используется для topLayoutGuide и bottomLayoutGuide когда включена автоматическая компоновка. Если панель навигации непрозрачна, один из этих "видов" будет находиться в [0,0]. Если ваши навигационные панели полупрозрачны, то же самое view обычно будет в [0,64] в портрете (20pt для строки состояния + 44pt для панели навигации). Существует аналогичная для нижней панели инструментов, если она у вас есть.

причина, по которой это делается таким образом, чтобы вы могли определить ограничения макета, которые работы с UIView объекты.

одна вещь, чтобы заметить, если у вас есть какая-то логика, которая работает на подпанели, будьте осторожны, чтобы не включать их в расчеты. Вы можете игнорировать их, тестируя:

[subview conformsToProtocol:@protocol(UILayoutSupport)]


в iOS 9 появился новый частный класс,_UILayoutSpacer, который не является потомком UIView, но может использоваться для настройки ограничений. Система, похоже, работает в двойном режиме, где контроллеры, загруженные из xibs и раскадровки, все еще используют _UILayoutGuide, в то время как контроллеры, созданные в коде, настраиваются с помощью _UILayoutSpacer.


UILayoutGuides

UILayoutGuides представляют прямоугольник в механизме компоновки. Они не будут отображаться в иерархии представлений, но могут использоваться как элементы в NSLayoutConstraint.

iOS 9

в iOS 9 Apple предоставляет новый улучшенный способ управления отрицательным пространством под названием A UILayoutGuide. А UILayoutGuide, или руководство по компоновке, - пустой прямоугольник в макете, к которому могут быть применены ограничения для определения его отношения к другим UILayoutGuides или UIViews.

UILayoutGuides нет иерархии и они не являются частью иерархии представления. Они принадлежат UIView, но они не могут владеть UIView или еще UILayoutGuide. UILayoutGuides не содержат CALayer и не UIResponder. Это означает, что в фазу рендеринга не добавляются накладные расходы на рисование, добавляя UILayoutGuide и нет никакого влияния на UIEvent процесс обработки, имеющего UILayoutGuide.

источник:

  • UILayoutGuide – авто-макета
  • UILayoutGuide.h