2014-02-21 128 views
1

我一直在StackOverflow很多不同的问题,但我只是无法弄清楚这里有什么问题。 我有一个视图控制器,从JSON接收数据,创建一个数组,然后,它建立一个具有固定高度的UITableView。 问题是我无法滚动到底部。它只是反弹回来。UITableView滚动返回顶部

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *cellIdentifier = @"SettingsCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 

    [cell.detailTextLabel setNumberOfLines:2]; 

    NSDictionary* place = [_placesData objectAtIndex:indexPath.row]; 
    [cell.textLabel setText:[place valueForKey:@"nome"]]; 
    [cell.detailTextLabel setText:[place valueForKey:@"endereco"]]; 
    [cell.detailTextLabel setLineBreakMode:NSLineBreakByWordWrapping]; 
    [cell.detailTextLabel sizeToFit]; 
    UIImage* originalImage = [UIImage imageNamed:@"encontre.png"]; 
    UIImage* resized = [UIImage imageWithCGImage:[originalImage CGImage]scale:(originalImage.scale * 1.8) orientation:(originalImage.imageOrientation)]; 
    cell.imageView.image=resized; 
    cell.textLabel.font = [UIFont fontWithName:@"GillSans" size:17]; 
    cell.textLabel.textColor = [UIColor whiteColor]; 
    cell.detailTextLabel.font = [UIFont fontWithName:@"GillSans-Light" size:17]; 

    self.tableView.scrollEnabled=YES; 
    self.tableView.bounces=YES; 
    [self.tableView setAlwaysBounceVertical:YES]; 
    return cell; 
} 

我不知道该怎么办。已尝试手动设置contentSize.height,强制bouncesscrollEnabled几乎将视图控制器上的一段代码翻转过来。

问候。

+0

那些最后三行之前'return'(设置滚动和弹跳行为的那些)不属于这种方法。最好把它们放在你的'UITableViewController'子类的'init'方法中,因为这些属性只需要设置一次。 – bdesham

+0

假设您正在使用界面生成器来处理主布局?所有这些自动调整属性都设置正确吗?除了@ bdesham的评论(这仍然不会导致您所看到的问题),此方法中的任何内容都不会显得太糟糕。 – jterry

+0

当然看起来像那个tableview框架正在可见的视图下方。 (比你看到的要大得多)你可以启用侧滚动条吗?当你滚动(拉起来)时,你会看到侧滚动条移动到可见的tableview框架之外 - 这意味着框架太大了。你有任何scrollViewDidScroll委托方法?另一种选择是填充tableview,比如100条记录。然后看看它是否允许滚动并且不反弹。 –

回答

0

只是设法解决它,如果有人是有这个同样的问题。

我做了什么,尺寸检查我的UITableView里面,我手动设置“行高度”在70(确切大小我使用)。

在此之后,一切都成为魅力。但是,如果任何人都可以对这里真正发生的事情给出全面的解释,那将非常棒。

+0

哇。反对票。我很想知道为什么。 –

1

可以在您的视图控制器的XIB检查,在右键菜单中选择您的tableView并单击“大小inspecto”,你在“iOS的6/7增量”变化: 你可以带-20高度

我认为这个问题是在适应与ios7和6

+0

在这里没有像这样的选项...我在我的Size Inspector上得到的所有东西都是表视图大小,滚动视图大小,视图和约束(实际上是空的) –

+0

因此,这并没有解决我的问题,但它确实有帮助。谢谢! –

2

UITableView的工作方式是需要知道每一行的高度才能计算其大小。

默认行为是假设每行高度为44px。这显然不是你的情况,因为你说它是70px。这就是为什么你必须改变它,以便能够一路向下滚动

例如假设你有10行。使用默认行高时,您的表格视图只能向下滚动到10 * 44 = 440px,从而获得了弹跳效果。 通过设置行高70像素,您的tableview现在下降到10 * 70 = 700像素

1

我有同样的问题。

我的解决方案是在重新加载表的数据之前更新contentSize。

tableViewOffre.contentSize = CGSizeMake(tableViewOffre.frame.size.width, [app.offres count] * 105); 

其中105是我的排高。

我认为这不是解决问题(很肮脏的方式我猜)的最佳方式,但发现它的唯一的解决办法。

1

尝试实施UITableViewDelegate方法tableView: heightForRowAtIndexPath:,不要让它自动分配(即sizeToFit)。 UITableView如果您不是非常具体,并且您没有重写某些方法,则可能会非常不可预测。
我调用[tableView reloadData]后,我有一个独特的问题,tableView自动回滚到顶部;这个问题是独一无二的,因为它只发生在iPad mini和iOS 8上,其他设备和操作系统都正常工作。希望它可以帮助别人......

0

我遇到同样的issue.In我的情况,我将一个实现代码如下,以自定义视图控制器,它通过推SEGUE呈现。如果tableview中显示的数据量超过某个数字,那么我无法触摸tableview底部的单元格。

已经尝试了很多方法:设置表格视图的框架/内容大小,没有一个适用于我。最后,我找到了根本原因并以简单的方式解决了它(尽管不够优雅)。

首先,根本原因:由IB创建的表视图的宽度大于其父视图控制器的宽度。因此,任何不在视图范围内的单元格都不会被触摸。

所以,解决方案很简单:转到StoryBoard,调整表视图的宽度,使其小于父视图的宽度。看起来如果一个表视图是由StoryBoard创建的,则无法更改它这是我迄今为止发现的。我想这是一个StoryBoard的错误。

帮助它对其他人有用。

1

其实你的问题是关系到表格的框架。通过设置“行高”正在为你工作,因为在你的桌子和行高的行的机会计数提供适合你的桌子高度。但它不是这样做的正确方法。 某处你需要检查表的高度可能类似于

块引用 (nameArray.count < 10 kSACellHeight * nameArray.count:kSACellHeight * 11))

相关问题