¿Por qué UIViewController se extiende bajo UINavigationBar, mientras que UITableViewController no lo hace?

yo tengoUITabbarController conUINavigationController en eso. Tengo una subclase deUIView que asigno como laview deUIViewController en elnavController. Esto es algo bastante estándar, ¿verdad? Asi es como lo hago

_productCategoryView = [[ProductCategoryView alloc] initWithFrame:self.view.frame];
self.view = _productCategoryView;

Estaview tiene unUITableView comosubView

_productCategoryTableView = [[UITableView alloc] initWithFrame:self.frame style:UITableViewStylePlain];
_productCategoryTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_productCategoryTableView.backgroundColor = [UIColor clearColor];
[self addSubview:_productCategoryTableView];

Por el bien de la depuración estoy configurandoself.backgroundColor = [UIColor blueColor] en la vista

De la inicialización anterior detableView uno podría pensar que la vista y la mesaframe es igual. Sin embargo cuando corro eniOS 7, el origen de la vista se encuentra detrás de laUINavigationBar. Esto es comprensible porque estoy configurandoself.navigationBar.translucent = YES; en mi subclase deUINavigationController. Pero lo que no entiendo es cómo está la mesa justo debajo de la mesa.navBar? ¿No debería empezar también desde(0, 0) que está detrás de lanavBar? Ver captura de pantallaScenario 1 abajo. Observe el tono azul detrásnavBar

Ahora yopush otroviewController en la pila de navegación, simplemente usando[self.navigationController pushViewController.....]. De nuevo tengo una costumbreUIView con untableView en eso. Sin embargo también tengo unUILabel Por encima de esta tabla, y otra vez para la depuración, le di unaredColor. Esta vez estoy poniendo la etiquetaorigin ser casi igual a la vista

CGRect boundsInset = UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(10, 10, 10, 10));

CGSize textSize = [_titleLabel.text sizeWithFont:_titleLabel.font
                               constrainedToSize:CGSizeMake(boundsInset.size.width, MAXFLOAT)
                                   lineBreakMode:NSLineBreakByWordWrapping];
printSize(textSize);
_titleLabel.frame = CGRectMake(boundsInset.origin.x,
                               boundsInset.origin.y,
                               boundsInset.size.width,
                               textSize.height);

Entonces, siguiendo la lógica anterior, la etiqueta debería ser visible, ¿verdad? Pero esta vez no lo es. Esta vez la etiqueta está detrás de lanavBar.

Note, el tono rojo detrás de la barra de navegación.

Realmente me gustaría alinear el subView debajo de la barra de navegación de manera consistente. Mis preguntas son

1. How is the tableView offset by 64pixels (height of nav + status bar in iOS 7) automatically, even though it's frame is same as the view's?

2. Why does that not happen in the second view?

Respuestas a la pregunta(3)

Su respuesta a la pregunta