Как установить позицию 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 ...
Как правильно реализовать собственный контроллер контейнера с таким поведением?