我是一个swift / xcode新手,遵循一个书籍应用程序,使用自动布局演示带有原型单元格的TableViews。这本书提供了完整的示例项目,所以我有一个项目要比较。
表格视图单元格使用不同高度的图像。我完全按照这本书,使用相同的图像等。但书籍项目显示动态调整到图像高度的TableViewCell行,但我的项目没有。
// both of the projects contain this line
tableView.estimatedRowHeight = 50
// I added this line to get cell rows to dynamically adjust size
tableView.rowHeight = UITableViewAutomaticDimension
添加了神奇的代码行,我的项目完美无缺,就像书籍项目一样。
我的问题是为什么没有UITableViewAutomaticDimension代码的神奇线条,书籍项目才能正常显示?我可能错过了哪个属性设置?表视图是否可以通过其他方式知道使用自动尺寸?
我仔细检查了我的所有约束(他们都遵循了本书),检查员的所有属性和大小,用于表格视图,单元格,框架,图像视图,并且已经在网上搜索可能的答案。 (这就是我发现自动维码魔术的方法。)
有没有人知道在哪里(魔法代码行除外)xcode可以被告知在单元格行上使用自动尺寸?有关我可能会在哪里寻找为什么两个明显相同的项目产生不同细胞行高度尺寸行为的任何建议?谢谢
答案 0 :(得分:0)
我重新整理了整个项目,现在它可以在没有神奇的代码行的情况下正常工作。 @techloverr提供了一个参考here on stackoverflow(我认为)支持我对正在发生的事情的理论。
我的答案理论是单元格的默认值是自动标注尺寸。以上参考资料支持这一点。
我认为在第一次项目尝试期间,我必须在图像视图或标签占位符中加载时手动碰撞或调整原型表格单元格的大小。
我的理论是,这个微小的变化导致xcode删除默认设置并使用我意外创建的新(固定)单元格行高。神奇的代码行反过来覆盖了新的固定大小"默认"设置。
当我从头开始重新整理整个项目时,我特别注意不要以任何方式撞击原型单元的大小。我使用了所有相同的约束,代码等。项目正确构建和显示。
希望其他人可以从这种体验中受益。 xcode IB很敏感!
答案 1 :(得分:0)
我尝试使用我的代码来查看tableView的单元格自动布局是如何工作的。我在我的项目中有这两个代表来自动调整我的tableView单元格高度,
(char)j
它按预期工作,然后我只是评论了这两个代表并将此行放在我的viewDidLoad方法中,
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 44.0;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
仍然像以前一样工作。
所以我深入研究了一下,我发现许多开发人员已经报告了你所面临的类似问题,self.tableView.rowHeight = UITableViewAutomaticDimension;有时候表现得很奇怪。
有时只需添加
即可- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.tableView.estimatedRowHeight = 50;
}
(现在是我的),有时候你必须加上
self.tableView.estimatedRowHeight = 50;
并且在某些情况下,上述工作都没有,但是两个代表是估计的HeightForRowAtIndexPath和heightForRowAtIndexPath。
这是我目前对UITableViewAutomaticDimension的了解,如果你找到其他信息,请分享。
谢谢!