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