表视图标题和单元格之间的UITableView差距

时间:2014-09-07 18:00:17

标签: objective-c uitableview ios7

我对tableViewHeader有一个奇怪的问题,我在滚动时调整了大小。

首先滚动到顶部后,tableHeader和单元格之间有空格,每次下一次滚动后,空间增加。

在tableViewHeader自定义类中,滚动后我改变高度并返回,然后重置它,因此UITableView将更新帧大小。

第一节视图,UITableViewController,

的高度为0.1f
self.automaticallyAdjustsScrollViewInsets = NO;

我仔细检查了tableViewHeader是否具有正确的高度。

我尝试了很多解决方案,但对我没什么用。

会发生什么?谁在增加额外的空间?为什么?

编辑:表委托和数据源方法

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 0.001;
  }

  -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
      return 0.001;
  }


  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  {
    return 1;
  }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0 && indexPath.row == 0) {
        return [self nameCell];
    }
    return nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0 && indexPath.row == 0) {
        return 60;
    }

    return 0;
}

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        UIView* view = [[UIView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, self.tableView.frame.size.width, 0.001f)];
        return view;
    }

    return nil;
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView == self.tableView) {
        [_tableHeader didScroll:scrollView.contentOffset];
    }
}

2 个答案:

答案 0 :(得分:1)

找到解决方案。

首先,不要在自定义类中设置tableViewHeader。在插入tableView的控制器中执行此操作。

第二步:在beginUpdates中设置tableViewHeader,endUpdates。

我不知道"更新"对于与tableViewHeader一起使用的单元格,但它可以正常工作

答案 1 :(得分:0)

我通过将标题(自动布局)放入一个固定的UIView作为子视图的包装视图来解决这个问题。差距将消失。

    self.header =  [[NSBundle mainBundle] loadNibNamed:@"FriendDetailHeaderView"
                                             owner:nil
                                           options:nil][0];
self.header.frame = CGRectMake(0, 0, ScreenWidth, ScreenWidth/16*9+25);
UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenWidth/16*9+25)];
aView.backgroundColor = [UIColor blackColor];
[aView addSubview:self.header];
self.tableView.tableHeaderView = aView;

自动布局tableViewHeader有时无法解决。但在我之前的项目中,将自动布局视图设置为tableView.tableViewHeader,它完美地运行