Почему UIViewController расширяется под UINavigationBar, а UITableViewController - нет?

у меня естьUITabbarController с участиемUINavigationController в этом. У меня есть подклассUIView что я назначаю в качествеview из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's frame is same as the view's?

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

Ответы на вопрос(3)

Ваш ответ на вопрос