Dlaczego UIViewController rozszerza się w ramach UINavigationBar, podczas gdy UITableViewController nie?
mamUITabbarController
zUINavigationController
w tym. Mam podklasęUIView
które przypisuję jakoview
zUIViewController
wnavController
. To dość standardowe rzeczy, prawda? Tak to robię
_productCategoryView = [[ProductCategoryView alloc] initWithFrame:self.view.frame];
self.view = _productCategoryView;
Toview
maUITableView
tak jaksubView
_productCategoryTableView = [[UITableView alloc] initWithFrame:self.frame style:UITableViewStylePlain];
_productCategoryTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_productCategoryTableView.backgroundColor = [UIColor clearColor];
[self addSubview:_productCategoryTableView];
Ze względu na debugowanie ustawiamself.backgroundColor = [UIColor blueColor]
na widoku.
Z powyższej inicjalizacjitableView
można by pomyśleć, że widok i stółframe
jest taki sam. Jednak kiedy wbiegamiOS 7
, pochodzenie widoku jest ustawione zaUINavigationBar
. Jest to zrozumiałe, ponieważ ustawiamself.navigationBar.translucent = YES;
w mojej podklasieUINavigationController
. Ale nie rozumiem, jak to się dzieje, że stolik siedzi tuż poniżejnavBar
? Nie powinien też zaczynać(0, 0)
który jest zanavBar
? Zobacz zrzut ekranuScenario 1
poniżej. Zwróć uwagę na niebieski odcieńnavBar
Teraz japush
inneviewController
na stosie nawigacji, po prostu używając[self.navigationController pushViewController.....]
. Znowu mam zwyczajUIView
ztableView
w tym. Jednak mam teżUILabel
powyżej tej tabeli i ponownie do debugowania, dałem jejredColor
. Tym razem ustawiam etykietęorigin
być prawie taki sam jak widok
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);
Tak więc, kierując się powyższą logiką, etykieta powinna być widoczna, prawda? Ale tym razem tak nie jest. Tym razem etykieta jest zanavBar
.
Zwróć uwagę, czerwony odcień za navBar.
Naprawdę chciałbym konsekwentnie wyrównać subView pod navBar. Moje pytania są
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?