Warum wird UIViewController unter UINavigationBar erweitert, UITableViewController nicht?
ich habeUITabbarController
mitUINavigationController
drin. Ich habe eine Unterklasse vonUIView
dass ich als die zuweisenview
vonUIViewController
in demnavController
. Das ist ziemlich normal, oder? So mache ich es
_productCategoryView = [[ProductCategoryView alloc] initWithFrame:self.view.frame];
self.view = _productCategoryView;
Dieseview
hat einUITableView
wiesubView
_productCategoryTableView = [[UITableView alloc] initWithFrame:self.frame style:UITableViewStylePlain];
_productCategoryTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_productCategoryTableView.backgroundColor = [UIColor clearColor];
[self addSubview:_productCategoryTableView];
Zum Debuggen setze ichself.backgroundColor = [UIColor blueColor]
auf den blick.
Aus der obigen Initialisierung vontableView
Man könnte denken, dass die Ansichten und Tabellenframe
ist gleich. Allerdings, wenn ich reinlaufeiOS 7
, der Ursprung der Ansicht liegt hinter demUINavigationBar
. Das ist verständlich, weil ich einstelleself.navigationBar.translucent = YES;
in meiner Unterklasse vonUINavigationController
. Aber was ich nicht verstehe, ist, warum der Tisch direkt unter dem Tisch stehtnavBar
? Sollte es nicht auch ab(0, 0)
das ist hinter demnavBar
? Siehe ScreenshotScenario 1
unten. Beachten Sie den blauen Farbton dahinternavBar
Jetzt ichpush
Ein weitererviewController
auf dem Navigationsstapel, einfach mit[self.navigationController pushViewController.....]
. Wieder habe ich einen BrauchUIView
mit einertableView
drin. Ich habe aber auch eineUILabel
über dieser Tabelle, und wieder zum Debuggen, gab ich es einredColor
. Diesmal setze ich die Etikettenorigin
fast so sein wie die Aussicht
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);
Nach der obigen Logik sollte das Etikett also sichtbar sein, oder? Aber diesmal ist es nicht. Diesmal steht das Label hinter demnavBar
.
Beachten Sie den roten Farbton hinter der Navigationsleiste.
Ich möchte die Unteransicht unter der Navigationsleiste wirklich konsequent ausrichten. Meine Fragen sind
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?