UINavigationBar UITableView上方

时间:2012-04-01 21:13:53

标签: iphone ios uitableview uinavigationbar

我以编程方式创建了一个UITableViewController类,该类显示了一个带有简单导航栏的表视图(尽管没有UINavigationController,因为表视图层次结构没有更多级别)。

以下是相关代码:

- (void)viewWillAppear:(BOOL)animated {
    UINavigationBar *navBar =  [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)];
    [self.tableView addSubview:navBar];
}

但是,导航栏会覆盖第一个表格视图单元格的大部分,并滚动整个视图。

如何在表格视图上方固定导航栏,并防止滚动代码?

5 个答案:

答案 0 :(得分:1)

问题是您正在使用UITableViewController。切换到标准的UIViewController,添加tableview委托和数据源方法,将tableview指向这些方法,然后执行您想要执行的操作。你也可以在XIB中添加一个UIToolbar,如果你愿意的话也可以这样创建。

如果您真的需要导航栏,请使用NSNavigationView控制器。

答案 1 :(得分:0)

当您使用导航控制器时,它会为您处理此问题,但导航栏只是另一个子视图。解决方法是相对于导航栏构建表格视图。

self.tableView.frame = CGRectMake(0,myNavBar.frame.size.height, 320, self.view.frame.size.height-myNavBar.frame.size.height);

答案 2 :(得分:0)

将导航栏的半透明属性设置为NO:

self.navigationController.navigationBar.translucent = NO;

答案 3 :(得分:-1)

拥有数据层次结构并不能真正驱动您是否需要使用UINavigationController。有三个很好的理由继续使用UINavigationController。

  1. 您可以免费获得导航栏,并且当您将导航控制器的根视图控制器属性设置为视图控制器时,导航控制器会处理设置根视图控制器的正确框架
  2. 如果有一天你醒来说,"嘿!我想在我真棒的应用程序中添加另一层信息!",您不需要对整体设计进行任何更改(或者最多只需要对最小设计进行更改)。
  3. 正如我对@ danh的建议所暗示的那样,你可以免于苹果公司决定对导航栏高度做出的任何重大变化。

答案 4 :(得分:-1)

此行为的解决方案是将UINavigationBar添加到父视图控制器的视图中:

[self.parentViewController.view addSubview:myNavBar];