UITableView滚动弹回到顶部

时间:2014-02-21 16:02:17

标签: ios objective-c uitableview uiviewcontroller

我在StackOverflow上遇到了很多不同的问题,但我无法弄清楚这里有什么问题。 我有一个视图控制器,它从JSON接收数据,创建一个数组,然后,它构建一个具有固定高度的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在视图控制器上几乎是一段代码。

问候。

7 个答案:

答案 0 :(得分:2)

UITableView的工作方式是,它需要知道每一行的高度,以便能够计算其大小。

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

的原因

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

答案 1 :(得分:1)

你可以检查你的ViewController的xib,选择你的tableView并点击右侧菜单中的“size inspecto”,然后你改变“iOS 6/7 Deltas”: 你可以把-20高度的磁带

我认为问题在于适应ios7和6

答案 2 :(得分:1)

如果有人遇到同样的问题,那就设法解决它。

我所做的是,在我的UiTableView的尺寸检查器中,我手动将“行高”设置为70(我正在使用的确切尺寸)。

在此之后,一切都充满魅力。但是,如果有人能够对这里真正发生的事情做出全面的解释,那真的很棒。

答案 3 :(得分:1)

我遇到了同样的问题。

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

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

其中105是我的行高。

我认为这不是解决问题的最佳方式(我猜的方式很脏),但这是唯一找到的解决方案。

答案 4 :(得分:1)

尝试实施UITableViewDelegate方法tableView: heightForRowAtIndexPath:,不要让它自动分配(即sizeToFit)。 UITableView如果您不是非常具体,并且不会覆盖某些方法,则可能非常难以预测。
在调用{{1}后,我遇到了一个独特的问题,即tableView会自动向上滚动到顶部}};这个问题很独特,因为它只发生在iPad mini和iOS 8上,其他所有设备和操作系统都运行正常。希望它有所帮助...

答案 5 :(得分:1)

实际上你的问题与表的框架有关。通过设置"行高"正在为你工作,因为你的桌子和行高的偶然计数给出了适合你的桌子高度。但这不是正确的做法。 在某处您需要检查表格的高度可能类似于

  

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

答案 6 :(得分:0)

我遇到了同样的问题。在我的情况下,我将一个tableview拖到一个自定义视图控制器,这是一个push segue所呈现的。如果tableview中显示的数据量超过一些数字,那么我就不能触摸tableview底部的单元格。

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

首先,根本原因:IB创建的表格视图的宽度大于其父视图控制器的宽度。因此,不会触及视图界限内的任何单元格。

所以,解决方案很简单:转到StoryBoard,调整表视图的宽度,使其小于父视图的宽度。似乎如果一个表视图是由StoryBoard创建的,则无法更改其框架通过代码。这就是我现在所发现的。我猜这是StoryBoard的错误。

帮助其他人有用。