在不在视图的部分使用[UITableView deleteSections:withRowAnimation:]
后,部分标题仍然可见。
在此图片上,我们看到了tableview的可见部分
在下一张图片中,我们看到整个tableview - AISLE 2被隐藏,直到用户向下滚动,它只包含一行:
当我向下滚动并删除最后一行时,即使我使用deleteSections
,AISLE 2部分标题仍然可见。如果我从AISLE 1中删除一行,则节标题仍保留在同一位置,通过向下滚动我仍然可以看到它。
此外,当尝试向下滚动以便AISLE 2标题位于视图中时,用作AISLE2的UI不是tableview的一部分,并立即向上滚动。这意味着 - 这是一个垃圾视图,显然不是表的一部分,因为我删除了它。出于某种原因,iOS不会删除此视图,而是将其从表中取消关联。
有什么想法吗?
答案 0 :(得分:0)
将[tableview reload]
设为1,尝试numberofsections
。
答案 1 :(得分:0)
您的数据来自哪里?您如何知道一开始有多少部分?我认为通过解释这个问题很容易解决你的问题。
看起来您可能有一个多维数nsmutablearray
,其中每个索引都是过道,每个对象都包含该岛的产品?或者你可以为每个过道使用不同的数组?
删除单元格时,只需检查剩余的单元格数,然后调用[self.tableView reloadData];
对于(假设的)例子;
如果你有过道的阵列:
NSMutableArray *aisleOne = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil];
NSMutableArray *aisleTwo = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil];
NSMutableArray *aisleThree = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil];
NSMutableArray *aisleFour = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil];
并将它们添加到一个数组中:
NSMutableArray *aisleArray = [[NSMutableArray alloc] initWithObjects:aisleOne, aisleTwo, aisleThree, aisleFour, nil];
然后,在删除单元格时调用此代码。它将从aisleArray
中删除所有空的过道(需要全局定义):
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:aisleArray];
for (int i=0; i<[tempArray count]; i++) {
if ([[tempArray objectAtIndex:i] count] == 0) {
[aisleArray removeObjectAtIndex:i];
}
}
[self.tableView reloadData];
为此,这两种方法应该是:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [aisleArray count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[aisleArray objectAtIndex:section] count];
}
(未测试的)
答案 2 :(得分:0)
只需获取该部分的表haderview并将其从超级视图中删除,tableView就不会对其进行管理。
UIView *mysteriousView = [tableView headerViewForSection:indexPath.section];
[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
[mysteriousView removeFromSuperview];
希望这有帮助!
答案 3 :(得分:0)
以后我很少遇到同样的问题...删除上一部分并不会从表格视图中移除最后一部分标题。
但是我注意到剩下的标题框正好在正常的表视图内容之下。 因此,对我有用的解决方法(快速但很容易将其转换为Objective C)是这样的:
DispatchQueue.main.async {
let unwantedViews = self.tableView.subviews.filter{ $0.frame.minY >= self.tableView.contentSize.height}
unwantedViews.forEach{ $0.isHidden = true }
}