Почему 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)

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