Ho UITabbarController
con UINavigationController
in esso. Ho una sottoclasse di UIView
che assegno come view
di UIViewController
nello navController
. Questa è roba abbastanza standard, giusto? Questo è come lo faccioPerché UIViewController si estende sotto UINavigationBar, mentre UITableViewController no?
_productCategoryView = [[ProductCategoryView alloc] initWithFrame:self.view.frame];
self.view = _productCategoryView;
Questo view
ha una UITableView
come subView
_productCategoryTableView = [[UITableView alloc] initWithFrame:self.frame style:UITableViewStylePlain];
_productCategoryTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_productCategoryTableView.backgroundColor = [UIColor clearColor];
[self addSubview:_productCategoryTableView];
Per motivi di debug io pongo self.backgroundColor = [UIColor blueColor]
sulla vista.
Dalla suddetta inizializzazione di tableView
si potrebbe pensare che la vista e la tabella frame
siano uguali. Tuttavia, quando corro in iOS 7
, l'origine della vista viene impostata dietro allo UINavigationBar
. Questo è comprensibile perché sto impostando self.navigationBar.translucent = YES;
nella sottoclasse di UINavigationController
. Ma quello che non capisco è come mai il tavolo è seduto appena sotto lo navBar
? Non dovrebbe anche iniziare da (0, 0)
che è dietro il navBar
? Vedi screenshot Scenario 1
qui sotto. Si noti la tonalità blu dietro navBar
Ora, io push
un'altra viewController
sullo stack di navigazione, semplicemente utilizzando [self.navigationController pushViewController.....]
. Ancora una volta ho un UIView
personalizzato con un tableView
in esso. Tuttavia ho anche un UILabel
sopra questa tabella, e ancora per il debug, ho dato un redColor
. Questa volta io pongo del origin
dell'etichetta da essere quasi uguale della vista
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);
Così, passando dalla logica sopra, l'etichetta deve essere visibile, giusto? Ma questa volta non lo è. Questa volta l'etichetta è dietro lo navBar
.
Avviso, la tonalità rosso dietro navBar.
Mi piacerebbe molto allineare il subView sotto il navBar in modo coerente. Le mie domande sono
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?
Stai creando Xcode 5 e iOS7 SDK ? –