Как установить позицию topLayoutGuide для контроллера дочернего представления

Реализация пользовательского контейнера, который очень похож на UINavigationController, за исключением того, что он не содержит весь стек контроллера. У него есть UINavigationBar, который ограничен контроллером контейнераs topLayoutGuide, который находится на 20 пикселей сверху, что нормально.

Когда я добавляю дочерний контроллер представления и помещаю его представление в иерархию, я хочу, чтобы его topLayoutGuide просматривался в IB и использовался для разметки дочернего контроллера представления 'с видом "s подпредставления, чтобы появиться в нижней части моей панели навигации. В соответствующей документации есть примечание о том, что необходимо сделать:

В частности, значением этого свойства является значение свойства длины объекта, возвращаемого при запросе этого свойства. Это значение ограничено либо контроллером представления, либо его окружающим контроллером представления контейнера (таким как контроллер навигации или панели вкладок) следующим образом:

Контроллер представления, не находящийся в контроллере представления контейнера, ограничивает это свойство указанием нижней части строки состояния, если она видна,

или чтобы указать верхний край контроллера представленияс точки зрения.Контроллер представления внутри контроллера представления контейнера не устанавливает это свойствос ценностью. Вместо этого контроллер представления контейнера ограничивает значение, чтобы указать:Нижняя часть панели навигации, если панель навигации виднаНижняя часть строки состояния, если видна только строка состоянияВерхний край контроллера представленияs, если ни строка состояния, ни панель навигации не видны

Но я нене совсем понимаю, каксдерживать этос ценностью так как и topLayoutGuide, и он 'Свойства длины s доступны только для чтения.

мы пробовали этот код для добавления дочернего контроллера представления:

[self addChildViewController:gamePhaseController];
UIView *gamePhaseControllerView = gamePhaseController.view;
gamePhaseControllerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentContainer addSubview:gamePhaseControllerView];

NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[gamePhaseControllerView]-0-|"
                                                                         options:0
                                                                         metrics:nil
                                                                           views:NSDictionaryOfVariableBindings(gamePhaseControllerView)];

NSLayoutConstraint *topLayoutGuideConstraint = [NSLayoutConstraint constraintWithItem:gamePhaseController.topLayoutGuide
                                                                            attribute:NSLayoutAttributeTop
                                                                            relatedBy:NSLayoutRelationEqual
                                                                               toItem:self.navigationBar
                                                                            attribute:NSLayoutAttributeBottom
                                                                           multiplier:1 constant:0];
NSLayoutConstraint *bottomLayoutGuideConstraint = [NSLayoutConstraint constraintWithItem:gamePhaseController.bottomLayoutGuide
                                                                               attribute:NSLayoutAttributeBottom
                                                                               relatedBy:NSLayoutRelationEqual
                                                                                  toItem:self.bottomLayoutGuide
                                                                               attribute:NSLayoutAttributeTop
                                                                              multiplier:1 constant:0];
[self.view addConstraint:topLayoutGuideConstraint];
[self.view addConstraint:bottomLayoutGuideConstraint];
[self.contentContainer addConstraints:horizontalConstraints];
[gamePhaseController didMoveToParentViewController:self];

_contentController = gamePhaseController;

В ИБ уточняюUnder Top Bars " а также "Под нижними решетками " для игры PhaseController. Одно из представлений специально ограничено верхним руководством по макету, в любом случае на устройстве оно находится на 20 пикселей ниже дна контейнера.навигационная панель s ...

Как правильно реализовать собственный контроллер контейнера с таким поведением?

Ответы на вопрос(4)

Ваш ответ на вопрос