Mam UITabbarController
z UINavigationController
w nim. Mam podklasę UIView
, którą przypiszę jako view
z UIViewController
w navController
. To dość standardowe rzeczy, prawda? Oto jak to zrobićDlaczego UIViewController rozszerza się pod UINavigationBar, a UITableViewController nie?
_productCategoryView = [[ProductCategoryView alloc] initWithFrame:self.view.frame];
self.view = _productCategoryView;
view
ten ma UITableView
jak subView
_productCategoryTableView = [[UITableView alloc] initWithFrame:self.frame style:UITableViewStylePlain];
_productCategoryTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_productCategoryTableView.backgroundColor = [UIColor clearColor];
[self addSubview:_productCategoryTableView];
Dla debugowania Mam ustawienie self.backgroundColor = [UIColor blueColor]
na widoku.
Z powyższej inicjalizacji tableView
można pomyśleć, że widok i tabela frame
jest taka sama. Jednak po uruchomieniu w iOS 7
, pochodzenie widoku jest ustawione za UINavigationBar
. Jest to zrozumiałe, ponieważ ustawiam self.navigationBar.translucent = YES;
w mojej podklasie UINavigationController
. Ale nie rozumiem, jak to jest, gdy stół siedzi tuż pod navBar
? Czy nie powinien on również zaczynać się od (0, 0)
, która znajduje się za navBar
? Zobacz zrzut ekranu Scenario 1
poniżej. Zauważ, niebieski odcień za navBar
Teraz push
inny viewController
na stosie nawigacji, po prostu za pomocą [self.navigationController pushViewController.....]
. Ponownie mam niestandardowy UIView
z tableView
w nim. Jednak mam również UILabel
powyżej tej tabeli, i ponownie do debugowania, dałem mu redColor
. Tym razem ja ustawiania etykiety origin
się prawie tak samo jak widok na
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);
Więc, idąc przez logikę powyżej, etykieta powinna być widoczna, prawda? Ale tym razem tak nie jest. Tym razem etykieta znajduje się za numerem navBar
.
Wskazówka czerwona barwa za pasek nawigacyjny.
Naprawdę chciałbym dostosować subView poniżej navBar konsekwentnie. 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?
Budujesz za pomocą Xcode 5 i SDK iOS7 ? –