【问题标题】:UINavigationBar Above UITableViewUITableView 上方的 UINavigationBar
【发布时间】:2012-04-01 21:13:52
【问题描述】:

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

以下是相关代码:

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

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

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

【问题讨论】:

    标签: iphone ios uitableview uinavigationbar


    【解决方案1】:

    问题是您使用的是 UITableViewController。切换到标准 UIViewController,添加 tableview 委托和数据源方法,将 tableview 指向这些方法,然后你就可以做你想做的事了。如果您愿意,您还可以在 XIB 中添加一个 UIToolbar 并以这种方式创建它。

    如果你真的想要一个导航栏,那么使用 NSNavigationView 控制器。

    【讨论】:

    • 如果你不想导航怎么办?
    • 这不适用于UITableView 的静态单元格。我只能使用UITableViewController,我尝试使用UIViewController,但没有运气。它需要。
    【解决方案2】:

    当您使用导航控制器时,它会为您处理这些,但导航栏只是另一个子视图。补救措施是相对于导航栏构建表格视图。

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

    【讨论】:

    • 再次感谢。奇怪的是,导航栏只是与表格视图一起被向下推,仍然覆盖它。我已将代码放在 viewDidLoad 方法中,在 [super viewDidLoad] 之前。
    • 今天高 44 像素。可能不是明天。 Apple 保留自行决定将高度更改为 43 像素或 42 像素或 100 像素的权利。再加上导航栏在横向模式下不是 44 像素高,所以你也会在那里迷路。
    • 不确定是什么促使我在本来可以的答案中添加关于常量的愚蠢建议。将编辑。
    • 这很好用。我为我的 TableViewController 设置了 headerView(.xib 文件)。 headerView 上有按钮。我将 tableViewController 添加到导航控制器中,导航栏覆盖了按钮的响应区域,导致您按下按钮并且没有任何反应。调整框架大小解决了这个问题
    【解决方案3】:

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

    self.navigationController.navigationBar.translucent = NO;
    

    【讨论】:

      【解决方案4】:

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

      1. 您可以免费获得导航栏,并且当您将导航控制器的根视图控制器属性设置为视图控制器时,导航控制器会处理设置根视图控制器的正确框架
      2. 如果你有一天醒来说:“嘿!我想在我的超棒应用程序中添加另一层信息!”,你不需要对整体设计进行任何更改(或者,最多,最小)。
      3. 正如我对 @danh 建议的评论所暗示的那样,您不会受到 Apple 可能决定对导航栏高度进行的任何奇怪更改的影响。

      【讨论】:

      • 感谢您的回复。问题是,我正在尝试将视图合并到 SNPopupView 中。我正在使用 ARC,我尝试通过一个 nib 文件创建所有这些,结果却得到了一大堆古怪的错误。我不确定是否可以通过代码以与弹出窗口一起使用的方式合并导航控制器,但我会再试一次。
      • 对不起,我对 SNPopupView 不熟悉。错误是什么? SNPopupView是你想要的导航栏吗?
      • 导航控制器必须嵌入所有模态视图控制器,这很烦人
      【解决方案5】:

      解决此问题的方法是将 UINavigationBar 添加到父视图控制器的视图中:

      [self.parentViewController.view addSubview:myNavBar];
      

      【讨论】:

      • 以模态方式显示的 UIViewController 没有 self.parentViewController
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多