Панель UINavigationController охватывает контент uiviewcontroller
У меня есть UIViewController, MyViewController, с UIToolbar вверху. Используя конструктор интерфейса, схема doc выглядит следующим образом:
View
- subview1
- subview2
- UIToolbar
- Bar Button Item1
- Bar Button Item2
- Bar Button Item3
MyViewController используется во всем приложении. Иногда это в UINavigationcontroller, иногда в UIPopoverView.
Когда он появляется в UINavigationController, панель навигации закрывает UIToolbar и все другое содержимое в верхней части View. В этот скриншот вы можете видеть, что UIToolbar полностью закрыт, а UIButton с изображением зеленой лампочки частично покрывается.
В соответствии с документацией
Любое представление, которое необходимо привязать к вершине и чуть ниже строки состояния (например, UIToolbar, UIButton и т.д.), требует дополнительной работы для правильного размещения.
Это дает решение, которое просто использует ограничения для перемещения вашего контента VC вниз на x пикселей, в моем случае UIToolbar. Это не похоже на хорошее решение, потому что предполагается, что вы всегда хотите, чтобы контент перемещался ниже панели навигации. В моем случае, очевидно, нет, поскольку MyViewController не всегда находится в UINavigationController. Когда я использую решение ограничений, представленное в этих документах, UIToolbar странно плавает вниз, а пиксели не фиксируются сверху, во всех случаях, когда MyViewController не находится в UINavigationController.
Мне что-то не хватает, так как я должен отображать VC-контент в UINavigationController? Большое спасибо.
Ответы
Ответ 1
В iOS7 UINavigationBar имеет полупрозрачное свойство. Таким образом, представление дочернего VC UINavigationViewController по умолчанию является UINavigationBar.
Если вам не нужно получать полупрозрачный эффект, отключите это свойство, используя следующий код.
self.navigationController.navigationBar.translucent = NO
Вы также можете использовать способ @ldindu для достижения своей потребности.
Ответ 2
Если вы работаете в версии iOS 7.0, вам нужно установить следующее свойство, которое было недавно введено в iOS 7.0 следующим образом
self.edgesForExtendedLayout = UIRectEdgeNone;
поскольку по умолчанию для свойства edgeForExtendedLayout установлено значение UIRectEdgeAll, что означает, что контроллеры представления используют по умолчанию полноэкранную компоновку.
Ответ 3
Определите, используете ли вы iOS 7.
#define IS_IOS7 [[[UIDevice currentDevice] systemVersion] hasPrefix:@"7"];
- (float)topPadding
{
return (IS_IOS7) ? 20.0f : 0.0f;
}
Используйте приращение оси Y кадра [self topPadding]
для перемещения вниз.
Я надеюсь, что ваша проблема решена.
Ответ 4
Если написано в Swift, оно edgesForExtendedLayout = UIRectEdge()