Подтвердить что ты не робот

Панель 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? Большое спасибо.

4b9b3361

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