我的iPhone应用中存在问题。有时,我主屏幕的UITableView的某些单元格重叠,但显示不正确。
以下是我的应用有时(很少)出现的方式:
我创建了两种类型的自定义UITableViewCell,带有一个xib文件来设计它们。
您对可能导致这种情况的原因有什么看法吗?这是iOS的错误,因为我已经在其他应用程序中注意到了这种错误。
感谢您的帮助。
更新:这是我的tableView:heightForRowAtIndexPath:方法。
我将根据两种类型的细胞返回正确的高度。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
Article *article = [self.articles objectAtIndex:[indexPath row]];
if (article.isFeatured) {
return 110;
} else {
return 75;
}
}
答案 0 :(得分:0)
除非你覆盖-tableView:heightForRowAtIndexPath:你的单元格的高度,所有单元格的标准高度都是44点。
在TableView委托中,您需要
- (CGFloat)tableView:(UITableView *) tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat cellHeight = 44.0;
//Calculate your cell height using indexPath and save it in cellHeight;
// Then
return cellHeight;
}
答案 1 :(得分:0)
试试这个
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d",indexPath.row];
UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];
if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 30.0f;
}
答案 2 :(得分:0)
我认为你要根据你的内容动态计算你的细胞高度。
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGSize constrainedSize = CGSizeMake(self.view.frame.size.width - 30, FLT_MAX);
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"HelveticaNeue" size:14], NSFontAttributeName,
nil];
CGRect requiredHeight = [self.articles objectAtIndex:[indexPath row] boundingRectWithSize:constrainedSize
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:attributesDictionary
context:nil];
return requiredHeight.size.height + 20;
}
答案 3 :(得分:0)
对于那些到达这里的人来说,我在iOS 11中遇到了完全相同的问题,而且很少发生。事实证明我在我的表视图中进行了一些动画编辑,但我有两个问题:有时这些更新发生在放置此表视图的控制器不在屏幕上时,因此表视图没有窗口;其他时候视图控制器在屏幕上,但动画在UIView.performWithoutAnimation
块内(由于重构错误),如下所示:
UIView.performWithoutAnimation {
tableView.beginUpdates()
// a couple of calls to tableView.insertRows(at:with:)
// and tableView.deleteRows(at:with:)
tableView.endUpdates()
}
在我的情况下,我删除了UIView.performWithoutAnimation
并再次启用了动画,但如果您需要保持表格更新而不动画,我建议您删除对tableView.beginUpdates()
和{{1}的调用使用动画tableView.endUpdates()
进行更新,或者只调用.none
。
我还检查了包含此表视图的视图控制器是否加载了视图及其tableView.reloadData()
,如果不是,我只是执行view.window != nil
而不是动画编辑。可能会检查tableView.reloadData()
是否也会这样做。
我希望这有助于某人:)