当表格视图向上滚动时,表格视图第一部分(第 0 部分)没有向上移动

Posted

技术标签:

【中文标题】当表格视图向上滚动时,表格视图第一部分(第 0 部分)没有向上移动【英文标题】:Tableview first section (section 0) is not moving up when table view scroll upwards 【发布时间】:2016-03-29 07:06:28 【问题描述】:

首先,我是 ios 的新手,这是我的第一个项目,第一个问题出现了。我的问题解释如下。

我有一个包含两个部分的 tableView。问题是,当我向上滚动 tableView 时,除了第一节标题之外的整个 tableView 向上移动。但是向下滚动就没有问题了。

我的代码是:

//----------------Table view delegate method numberOfSectionsInTableView.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

     // Return the number of sections.
     return 2;


//----------------Table view delegate method numberOfRowsInSection.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

   if (section==0)
   
       return [tableSection1 count];
   
   else
   
       return [tableSection2 count];
   


//----------------Table view delegate method titleForHeaderInSection.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

   if(section==0)
   
       return @"Mandatory Details";
   
   else
   
       return @"Optional Details";
   


//----------------Table view delegate method cellForRowAtIndexPath.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

   static NSString *simpleTableIdentifier = @"SimpleTableItem";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: simpleTableIdentifier];
   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:simpleTableIdentifier];

   if(indexPath.section==0)
   
       // Set the data for this cell:

       cell.textLabel.text = [tableSection1 objectAtIndex:indexPath.row];
       cell.detailTextLabel.text = [tableSection1Subtitle objectAtIndex:indexPath.row];
   
   if(indexPath.section==1)
   
       // Set the data for this cell:

       cell.textLabel.text = [tableSection2 objectAtIndex:indexPath.row];
       cell.detailTextLabel.text = [tableSection2Subtitle objectAtIndex:indexPath.row];
   
   return cell;


//---------------Table view delegate method didSelectRowAtIndexPath.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if(indexPath.section==0)
    
        if(indexPath.row==0)
        
            //....my code here....
        
        if(indexPath.row==1)
        
            //....my code here....
        
        if(indexPath.row==2)
        
            //....my code here....
        
        if(indexPath.row==3)
        
            //....my code here....
        
    
    if(indexPath.section==1)
    
        if(indexPath.row==1)
        
            //....my code here....
        
        if(indexPath.row==2)
        
            //....my code here....
        
        if(indexPath.row==3)
        
            //....my code here....
        
    

所以从我的代码来看,第 0 节标题,即“强制详细信息”,并没有根据整个 tableView 的移动向上移动。第 0 部分在视图顶部停止,而 tableView 的其余部分即使在视图顶部之后也会向上移动。但是如果我们向下滚动,即使是第 0 部分,表格视图中的任何其他组件也没有其他问题。

请帮助我。它对每个人来说都像是一个错误。所以我被我的领导解雇了。请帮助我。

【问题讨论】:

这是设计使然。在该部分的最后一行向上移动之前,部分标题不会移动。您可以在 iPhone 上的 Contacts 应用程序中检查它的工作方式。 那么第二部分呢? 您可以将tableview样式更改为UITableViewStyleGrouped(从界面执行)以实现您想要的。 谢谢 Nishant。它帮助我避免了我的问题并获得了一种新的紧凑风格。非常感谢.. 您也可以在下面尝试我的答案 - 稍作调整。 【参考方案1】:

解决方案一:您可以将tableview样式更改为UITableViewStyleGrouped(可以从界面进行)以实现您想要的。

解决方案 2: 您可以使用此调整:

CGFloat dummyViewHeight = 40;
UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, dummyViewHeight)];
self.tableView.tableHeaderView = dummyView;
self.tableView.contentInset = UIEdgeInsetsMake(-dummyViewHeight, 0, 0, 0);

部分标题现在将像单元格一样滚动。

【讨论】:

解决方案 1 比解决方案 2 更容易。以编程方式执行太难【参考方案2】:

您可能需要更改表头的默认行为

你可以参考这个: Change Default Scrolling Behavior of UITableView Section Header

【讨论】:

感谢您的帮助。但是通过更改 xcode 本身的表格视图样式,我发现更改比编程更容易。

以上是关于当表格视图向上滚动时,表格视图第一部分(第 0 部分)没有向上移动的主要内容,如果未能解决你的问题,请参考以下文章

如何在表格视图中取消固定表格视图部分标题

将集合视图滚动到顶部

当我滚动浏览我的表格视图时,活动的表格视图单元格不断被禁用

当用户向下滚动后向上滚动时,如何在表格视图中显示搜索框?

点击标签栏时将表格视图滚动到顶部

将一个视图滑过另一个视图