我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
带有 a的习惯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
.
请注意,导航栏后面的红色调。
我真的很想始终对齐导航栏下方的子视图。我的问题是
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?