我有TableViewController
,点击自定义单元格即可转到相关的WebViewController
。
我遇到的问题是,当我点击"返回"在WebViewController
TableViewController
"跳过"中的表视图单元格中TableViewController
。
一旦桌面视图开始滚动,它们就会跳回到正确的高度。所以我假设它与- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
id model = self.Model[indexPath.row];
if ([model isKindOfClass:[Two self]]) {
return 490; // As of 11/13/14
} else { // 2 other custom cells
return tableView.rowHeight; // return the default height
}
}
自定义单元格的高度有关,但我不完全确定。
TableViewController.m
尝试:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
id model = self.Model[indexPath.row];
if ([model isKindOfClass:[One self]]) {
ListTableViewCell *cellOne = [tableView dequeueReusableCellWithIdentifier:@"1Cell"];
CGFloat heightOne = [cellOne.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return heightOne + 2;
} else if ([model isKindOfClass:[Two self]]) {
ListTableViewCellTwo *cellTwo = [tableView dequeueReusableCellWithIdentifier:@"2Cell"];
CGFloat heightTwo = [cellTwo.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return heightTwo + 400;
} else if ([model isKindOfClass:[Three self]]) {
ListTableViewCellThree *cellThree = [tableView dequeueReusableCellWithIdentifier:@"3Cell"];
CGFloat heightThree = [cellThree.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return heightThree + 2;
} else {
return 300;
}
}
也试过:
[cell setNeedsUpdateConstraints];
更新
还尝试了[cell setNeedsLayout];
和estimatedHeight
。
同时尝试设置多个不同位置Automatic Row Dimension
,并同时添加{{1}}。
帮助将不胜感激!将发布所需的任何额外信息。谢谢!
我只支持iOS 8.我使用自动布局和故事板。
自定义单元格2的其他漫游板信息:
故事板限制:
答案 0 :(得分:2)
我相信您没有正确设置约束。我之前遇到了类似的问题,并通过设置UILabel的前导,尾随,顶部和底部间距的约束来解决。
玩弄约束。行为将开始改变。继续前进,直到你得到你想要的东西。
这似乎不是专业人士的一个愚蠢的技术答案。但是,如何通过苹果没有正确引入的虚拟约束来解决它。
另外,在cellForRowAtIndexPath中返回单元格之前,请尝试 [cell setNeedsUpdateConstraints];
。
并且:[cell setNeedsLayout];
答案 1 :(得分:1)
我终于解决了这个问题,关键是计算一个估计的高度。似乎你返回的估计越准确,跳跃/紊乱就越少。
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
switch (yourTypeOfCell) {
case something:
return estimatedHeight;
break;
case default:
return defaultValue;
break;
}
}
答案 2 :(得分:0)
尝试在您的UITableView的viewDidLoad中设置estimatedRowHeight
,以帮助UIKit猜测您的tableView的行高
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.estimatedRowHeight = 490.0;
}