UITableView:页眉和页脚视图的绘画行为

时间:2011-10-16 09:20:06

标签: ios uitableview

为什么tableview的页眉和页脚始终位于视图层次结构的顶部,而不是表格的单元格?

这是我得到的:

  • 包含自定义单元格,页脚和标题
  • 的表格视图
  • 右侧有菜单按钮的导航栏
  • 当用户点击菜单按钮时,半透明菜单(UIView)从顶部淡入,但不在导航栏上,仅在我的tableviewcontroller视图上淡入
  • 当用户选中菜单按钮时,菜单会滑回(0,-menuHeight)
  • 但是当菜单位于标题上方时,此菜单区域位于我的标题
  • 后面

我将菜单固定在tableviewcontroller的视图上,因为我希望导航栏始终可见。将其锚定在导航栏上的解决方案解决了标题视图的问题,但覆盖了导航栏。

有谁知道如何解决这个问题?为什么细胞被正确涂抹?

2 个答案:

答案 0 :(得分:1)

您可能不应直接干扰UITableView的内部视图层次结构。 Apple可以随意订购表格视图的子视图(并在将来的版本中进行更改)。

相反,将表视图和菜单视图放入公共容器视图中,并使后者成为视图控制器的主视图。这样,您可以确定菜单视图始终位于表格视图上方。

答案 1 :(得分:0)

我改变了我的设计,但现在我没有在我的桌子上得到触摸事件。

但是当我添加这个方法时 - 我明白了,我正在触摸tableviewcontroller ......

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"ShieldingViewController received touch");
    [self.buttonMenu shieldingViewTouched];
}

以下是我改变的内容:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect viewFrame = self.view.frame;
    viewFrame.origin.y = 0;

    UIView *rootView = [[UIView alloc] initWithFrame:viewFrame];
    rootView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;


    // Setup the table view
    UITableView *newTableView = [[UITableView alloc] initWithFrame:viewFrame style:self.tableView.style];
    newTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    newTableView.backgroundColor = [UIColor darkGrayColor];


    UIView *menuLayerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];


    self.tableView = newTableView;

    [rootView addSubview:self.tableView];
    [rootView addSubview: menuLayerView];
    self.view = rootView;

    [[CustomNavigationController instance] setCurrentViewForMenu: menuLayerView];
    [[CustomNavigationController instance] showMenuInNavigationBarForController:self];

    [newTableView release];
    [menuLayerView release];
    [rootView release];
}