我在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
,强制bounces
和scrollEnabled
在视图控制器上几乎是一段代码。
问候。
答案 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的错误。
帮助其他人有用。