¿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?