UINavigationBar por encima de UITableView

Estoy creando mediante progtwigción una class UITableViewController que muestra una vista de tabla con una barra de navigation simple (aunque sin un UINavigationController , ya que no hay más niveles en la jerarquía de vista de tabla).

Aquí está el código relevante:

 - (void)viewWillAppear:(BOOL)animated { UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)]; [self.tableView addSubview:navBar]; } 

Sin embargo, la barra de navigation cubre la mayor parte de la primera celda de vista de tabla y se desplaza con toda la vista.

¿Cómo puedo arreglar la barra de navigation sobre la vista de la tabla y evitar que se desplace por el código?

El problema es que está utilizando UITableViewController. Cambie a un UIViewController estándar, añada los delegates de tableview y los methods de fuente de datos, señale la vista de tabla a esos methods y luego haga lo que quiera hacer. También podría agregar una barra UITool en el XIB y crearla de esa manera si lo desea.

Si realmente desea una barra de navigation, utilice un controller NSNavigationView.

Cuando utiliza un controller de navigation, se encarga de esto para usted, pero la barra de navigation es solo otra subvista. El remedio es enmarcar la vista de la tabla en relación con la barra de navigation.

 self.tableView.frame = CGRectMake(0,myNavBar.frame.size.height, 320, self.view.frame.size.height-myNavBar.frame.size.height); 

Establezca la propiedad translúcida de la barra de navigation en NO:

 self.navigationController.navigationBar.translucent = NO; 

Tener una jerarquía de datos realmente no conduzca si necesita o no utilizar un UINavigationController. Hay tres buenas razones para seguir adelante y simplemente usar UINavigationController.

  1. Obtiene la barra de navigation de forma gratuita y el controller de navigation maneja la configuration del marco apropiado de su controller de vista raíz cuando establece la propiedad del controller de vista raíz del controller de navigation en el controller de vista
  2. Si un día te despiertas y dices: "¡Oye, quiero agregar otra capa de información a mi increíble aplicación!", No necesitas hacer ningún cambio en el layout general (o, como mucho, en los mínimos).
  3. Como lo sugiere mi comentario a la sugerencia de @ danh, eres inmune a cualquier cambio que Apple decida hacer con respecto a la altura de la barra de navigation.

La solución a este comportamiento sería agregar UINavigationBar a la vista del controller de vista principal:

 [self.parentViewController.view addSubview:myNavBar];