所以我有:
- (UItableVIEwCell *)tableVIEw:(UItableVIEw *)tableVIEw cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static Nsstring *CellIDentifIEr = @"Cell"; UItableVIEwCell *cell = (UItableVIEwCell*)[tableVIEw dequeueReusableCellWithIDentifIEr:CellIDentifIEr]; if (cell == nil) { cell = [[UItableVIEwCell alloc] initWithStyle:UItableVIEwCellStyleDefault reuseIDentifIEr:CellIDentifIEr]; cell.backgroundcolor = [UIcolor greencolor]; } UILabel *vIEwLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0f,10.0f,[[UIScreen mainScreen] bounds].size.wIDth,40.0f)]; vIEwLabel.text = @"Test"; vIEwLabel.backgroundcolor = [UIcolor clearcolor]; [cell.contentVIEw addSubvIEw:vIEwLabel]; return cell;}- (voID)tableVIEw:(UItableVIEw *)tableVIEw dIDSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableVIEw beginUpdates]; [self animateCell:indexPath andtableVIEw:tableVIEw]; [tableVIEw endUpdates];}- (voID)animateCell:(NSIndexPath*)indexPath andtableVIEw:(UItableVIEw*)tableVIEw{ [UIVIEw animateWithDuration:1.0f animations: ^ { UItableVIEwCell *cell = [tableVIEw cellForRowAtIndexPath:indexPath]; CGRect rect = cell.frame; rect.size.height = 90.0f; cell.frame = rect; NSLog(@"%f",cell.frame.size.height); }];}
但它不起作用.但如果我补充说:
- (CGfloat)tableVIEw:(UItableVIEw *)tableVIEw heightForRowAtIndexPath:(NSIndexPath *)indexPath{ if ([indexPath isEqual:[tableVIEw indexPathForSelectedRow]]) { return 90.0f; } return 40.0f;}
我看到该单元格正在改变其高度,动画将应用于在animateCell方法中创建的自定义单元格
解决方法 我认为你不应该使用beginUpdate / endUpdates方法并在调用reloadData之前手动执行动画.单元格的最终状态(动画之后)是使用数据源定义的.这是tableVIEw中的动画示例:dIDSelectRowAtIndexPath:- (voID)tableVIEw:(UItableVIEw *)tableVIEw dIDSelectRowAtIndexPath:(NSIndexPath *)indexPath{ _selectedindexPath = indexPath; [UIVIEw animateWithDuration:1 animations:^{ // move down cells which are below selected one for (UItableVIEwCell *cell in tableVIEw.visibleCells) { NSIndexPath *cellindexPath = [tableVIEw indexPathForCell:cell]; if (cellindexPath.row > indexPath.row) { CGRect frame = cell.frame; frame.origin.y += kTargetHeight - tableVIEw.rowHeight; cell.frame = frame; } } // expand selected cell UItableVIEwCell *cell = [tableVIEw cellForRowAtIndexPath:indexPath]; CGRect frame = cell.frame; frame.size.height = kTargetHeight; cell.frame = frame; } completion:^(BOol finished) { [tableVIEw reloadData]; // commit final state }];}
所选单元格的最终状态:
- (CGfloat)tableVIEw:(UItableVIEw *)tableVIEw heightForRowAtIndexPath:(NSIndexPath *)indexPath{ if ([indexPath isEqual:_selectedindexPath]) { return kTargetHeight; } return tableVIEw.rowHeight;}总结
以上是内存溢出为你收集整理的ios – 用于更改UITableViewCell高度的自定义动画全部内容,希望文章能够帮你解决ios – 用于更改UITableViewCell高度的自定义动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)