У меня UITabbarController с UINavigationController в нем. У меня есть подкласс UIView, который я назначаю как view of UIViewController в navController. Это довольно стандартный материал, не так ли? Вот как я это делаю
_productCategoryView = [[ProductCategoryView alloc] initWithFrame:self.view.frame];
self.view = _productCategoryView;
Этот view имеет UITableView как subView
_productCategoryTableView = [[UITableView alloc] initWithFrame:self.frame style:UITableViewStylePlain];
_productCategoryTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_productCategoryTableView.backgroundColor = [UIColor clearColor];
[self addSubview:_productCategoryTableView];
Для отладки я устанавливаю self.backgroundColor = [UIColor blueColor] в представлении.
Из приведенной выше инициализации tableView можно подумать, что представление и таблица frame совпадают. Однако, когда я запускаю в iOS 7, начало представления устанавливается за UINavigationBar. Это понятно, потому что я устанавливаю self.navigationBar.translucent = YES; в свой подкласс UINavigationController. Но что я не понимаю, так это то, как стол сидит чуть ниже navBar? Разве он не должен начинаться с (0, 0), который находится за navBar? См. Снимок экрана Scenario 1 ниже. Обратите внимание на синий оттенок за navBar

Теперь я push еще один viewController в стеке навигации, просто используя [self.navigationController pushViewController.....]. Снова у меня есть пользовательский UIView с tableView в нем. Однако у меня также есть UILabel над этой таблицей, и снова для отладки я дал ей redColor. На этот раз я устанавливаю метку origin почти так же, как и
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);
Итак, перейдя по логике выше, ярлык должен быть видимым, не так ли? Но на этот раз это не так. На этот раз метка находится за navBar.

Обратите внимание, красный оттенок позади navBar.
Мне бы очень хотелось выровнять subView под navBar последовательно. Мои вопросы
1. How is the tableView offset by 64pixels (height of nav + status bar in iOS 7) automatically, even though it frame is same as the view's?
2. Why does that not happen in the second view?