2014-09-03 102 views
0

我正在使用XCode + IB来布局一个非常简单的视图。顶部有一个标准的NavigationController导航栏。在主视图内部是另一个视图,其中包含一个标签,然后在下面的表格中占据屏幕的其余部分。我将标签放在这个容器视图中,因为我想让导航栏下方的区域具有背景颜色(灰色)。ios界面生成器布局奇怪

问题是,即使主视图从navigationBar的下方开始,标签的容器视图在导航栏下方存在。有点。您会看到,标签出现在导航栏下方,但灰色背景以某种方式位于导航栏下方。如果我将标签视图的高度设置为75px,它就会开始出现在导航栏下方。 (状态栏和导航栏为22 + 44)

禁用自动布局。

那么,为什么视图容器在导航栏的背景下面开始? (但不是它的内部标签?)

自IOS7以来,我在ViewController中使用它,以便内容从导航栏下面开始,而不是在它下面。

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]){ 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
} 

我意识到或者我可以设置主视图的背景或使标签尤其是大型也许并给它一个背景,但我想看看这是为什么不先工作。

编辑: 我给这个视图添加了一个功能,当某些UITextFields打开键盘时,主视图会向上移动125px。有趣的是,除了标签的视图容器外,整个视图都移动了。当父母的观点上下移动时,这种观点仍然存在。然而标签本身上下移动。所以再次,中间的观点似乎挂窗口,而不是实际的主视图...

IB

enter image description here

+0

关于你的实际问题,很难明确你所指的是什么。听起来就像你已经创建了一个UIView并定位它,以便它的y-coord正好位于导航栏的下方,并且你放置在UIView中的UILabel以某种方式呈现出UIView的边界(即下面)这是没有意义的) – Wizkid 2014-09-03 18:16:56

+0

标签的容器视图位于0,0 ...因为UIRectEdgeNone被设置,所以它应该将其置于导航栏的正下方。标签位于此容器视图内,标签正确显示在整个屏幕上。但是,容器视图的背景设置为灰色,它不可见。显然,它不在UIEdgeRectNone逻辑中,在导航栏下面?标签和容器视图是这样脱节的,也没有意义。 – Miro 2014-09-03 18:50:26

回答

0

检查您是否已经调整上滚动视图插图!

转到您的视图控制器,它是在属性检查器

+0

我没有使用故事板,但是如果我将它设置为NO,它没有任何作用。 – Miro 2014-09-03 18:47:22

0

你可能要考虑一个头单元格,如果你只是希望能够发布只是导航栏下面的消息或指令下。你可以避免额外的UIView事情。标题单元格不会随表格视图一起滚动,如果这是您的担心,它将位于nav的下方,并位于表格单元的其余部分之上。这是一个使用自定义标题单元格设置背景颜色的简化示例。如果您愿意,也可以通过IB将UILabels等等放入单元格中。

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    MyCustomHeaderCell *headerCell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomHeaderCell"]; 
    headerCell.backgroundColor = [UIColor grayColor]; 
    return headerCell; 
} 
+0

很棒的建议。我不喜欢部分标题的一件事是,当你把桌子拉得太远时,它们会弹跳下来。或者禁用桌面上的反弹感觉不自然。 – Miro 2014-09-03 18:26:08

+0

它不应该反弹。它应该相对于非标题表格单元是固定的(它会弹跳) – Wizkid 2014-09-03 18:28:33