如何UITableViewCell在表格视图中使用s 内的自动布局,让每个单元格的内容和子视图确定行高(本身/自动),同时保持平滑的滚动性能?
我有一个使用自动布局在故事板中定义UITableView的自UITableViewCell定义.细胞有几条多线UILabels.
在UITableView出现要正确计算单元格高度,但在最初的几个细胞高度不正确的标签之间的分歧.滚动一下后,一切都按预期工作(即使是最初不正确的单元格).
- (void)viewDidLoad {
[super viewDidLoad]
// ...
self.tableView.rowHeight = UITableViewAutomaticDimension;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"];
// ...
// Set label.text for variable length string.
return cell;
}
Run Code Online (Sandbox Code Playgroud)
有什么我可能会遗漏,导致自动布局在前几次无法完成其工作吗?
我已经创建了一个演示此行为的示例项目.

我对iOS很新.我有一个UITableView,它填充了许多自定义单元格,但向下滚动时底部单元格是不正确的.我的UITableView的Y值是44,高度是480.向下滚动时只有最后一个单元格的一半可见.我该如何解决这个问题.
提前致谢.
我有一个UITableView,每个单元格都有一个图像和两个标签,正如你在第一张图片上看到的那样

所以我尝试使用自我调整细胞,一切都很好,除了两件事:
1)第一个和第二个单元格没有正确显示内容,但在我向下滚动然后返回它们之后一切正常.我试图在viewDidAppear中使用[tableview reloadData],但它没有帮助.首先观看不合适的标签.你可以在这个视频上观看它https://www.youtube.com/watch?v=I9DGBl1c5vg
查看第一个单元格上的标签.
2)这是一个艰难的.我正在滚动表格,一切都很好,但是当我选择行时问题就出现了.它正在推动我进行详细视图,但是当我按下"返回"并返回到主视图时,tableview跳转,所以我回到不选择的行,如果我滚动表格它不会滚动平滑,但是跳跃.以下是两个视频的链接,第一个显示滚动顺畅https://www.youtube.com/watch?v=9wAICcZwfO4如果我不去详细视图,第二个显示跳跃问题https:/ /www.youtube.com/watch?v=fRcQ3Za1wDM.
它绝对肯定与自我调整单元格有关,因为如果我不使用它,则不会发生这种问题.
当我第一次出现视图时,当我尝试一直滚动到表格视图的底部时,它不会滚动到正确的底部单元格.它接近结束但不完全.
如果稍后再次调用该方法,则会滚动到底部.现在我的解决方案是滚动两次,它只有在第二个延迟时才有效.
我想知道这是否是iOS 8中的一个错误,或者是否有任何我可以以正确的方式实现的.
NSIndexPath* path = [NSIndexPath indexPathForRow:[self.someArray count] - 1 inSection:0];
[self.someList scrollToRowAtIndexPath:path
atScrollPosition:UITableViewScrollPositionBottom
animated:NO];
//TODO: this is kindof a dirty hack for now, there seems to be a bug in ios8 auto sizing cells and figuring out the proper scroll location
dispatch_after(0, dispatch_get_main_queue(), ^{
[self.someList scrollToRowAtIndexPath:path
atScrollPosition:UITableViewScrollPositionBottom
animated:NO];
});
Run Code Online (Sandbox Code Playgroud) 这里有一个奇怪的问题.我想将我的表视图滚动到第1部分第0行的底部.我正在使用此代码:
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 1), atScrollPosition: .Bottom, animated: true)
Run Code Online (Sandbox Code Playgroud)
它似乎在iOS 9.0及更高版本的模拟器中完美运行.但是在我的设备(iOS 8.1)和8.3的模拟器上,它完全相反.它滚动到单元格的顶部而不是底部!似乎很奇怪.我在这里做错了什么想法?非常感谢任何指针!谢谢
ios ×6
uitableview ×6
autolayout ×2
ios8 ×2
cell ×1
nsautolayout ×1
objective-c ×1
reloaddata ×1
row-height ×1
scroll ×1
swift ×1