Ios 以编程方式删除和插入项目时,默认的UITableView滚动应该如何工作?
我有一个带有两个部分的Ios 以编程方式删除和插入项目时,默认的UITableView滚动应该如何工作?,ios,uitableview,uiscrollview,Ios,Uitableview,Uiscrollview,我有一个带有两个部分的UITableView。项目可以从一个部分移动到另一个部分,如下图所示 基本互动如下: 你刷了一个单元格/行 该单元格将从其分区中删除 该单元格将添加到另一部分的底部 注意,我使用了一系列删除rowsatindexpaths和插入rowsatindexpaths与CATTransactions。删除后再添加并不是唯一的表操作;对于常规方法,我希望在前面的操作完成后启动链式插入/删除/更新动画。下面是一个例子: [CATransaction begin]; [CATra
UITableView
。项目可以从一个部分移动到另一个部分,如下图所示
基本互动如下:
- 你刷了一个单元格/行
- 该单元格将从其分区中删除
- 该单元格将添加到另一部分的底部
删除rowsatindexpaths
和插入rowsatindexpaths
与CATTransaction
s。删除后再添加并不是唯一的表操作;对于常规方法,我希望在前面的操作完成后启动链式插入
/删除
/更新
动画。下面是一个例子:
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[table beginUpdates];
// update data source...
// insertRows...
[table endUpdates];
}];
[table beginUpdates];
// update data source...
// deleteRows...
[table endUpdates];
[CATransaction commit];
当表格视图中有足够的项目占据了超过一个屏幕的空间时,(我认为是),当单元格从一个部分删除并添加到另一个部分时,默认的UITableView
滚动开始
我的假设是(UITableView
滚动以放置/保持插入的行在视图中,因为我在文档中没有找到任何关于滚动行为的引用)
考虑以下示例:滑动单元格以将其从一个部分删除,并将其添加到另一个部分:
- 该单元格当前在视图中,因为用户正在滑动它(因此,
deleteRows…
- (在某些情况下)表格视图会滚动后续的
;滚动发生在插入之前,以便观察动画插入插入行…
UITableView
s的层次结构,以便首选第0节,因此表视图将滚动到第0节,以便观察插入内容,而不是滚动到其他节
具体问题#2:上述示例中的单元格高度是否导致观察到错误的滚动
这是我用来计算表视图单元格高度的代码:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger index = indexPath.row;
ParsedItem* item;
if (indexPath.section == 0) {
item = [_parsedItemList.toDoList objectAtIndex:index];
}
else {
item = [_parsedItemList.doneList objectAtIndex:index];
}
NSAttributedString* attrString = [[NSAttributedString alloc] initWithString:item.displayText attributes:_tableViewTextAttrNormal];
CGFloat height = [self textViewHeightForAttributedText:attrString andWidth:300.00];
return fmaxf(50.0, height);
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 50.0;
}
- (CGFloat)textViewHeightForAttributedText:(NSAttributedString*)text andWidth:(CGFloat)width {
UITextView* calculationView = [[UITextView alloc] init];
[calculationView setAttributedText:text];
CGSize size = [calculationView sizeThatFits:CGSizeMake(width, FLT_MAX)];
return size.height;
}
一般问题:如上所述,我在文档中没有找到任何描述滚动应该如何工作的内容。是否有一条我遗漏的一般规则或原则?如果我只是做错了,我不想添加显式滚动操作