通过UISwitch为UITableViewCell的插入和删除设置动画

通过UISwitch为UITableViewCell的插入和删除设置动画,uitableview,Uitableview,我有一个UITableView,用于显示应用程序的设置。我想要实现的是当UISwitch的值更改时两个UITableViewCell的动画 iOS设置中的Wi-Fi设置就是一个很好的例子。当您关闭Wi-Fi时,手机下方的部分会逐渐淡出并向上移动,直到消失。相反,当启用Wi-Fi时,它们会淡入。此外,Tweetbot 4在选择主题下的设置时,在显示设置中也能很好地做到这一点。启用时,两个单元格向上移动直到消失,然后一个单元格向下移动以取代其他两个单元格 我能够找到一个实现隐藏和显示细胞的方法,但是

我有一个UITableView,用于显示应用程序的设置。我想要实现的是当UISwitch的值更改时两个UITableViewCell的动画

iOS设置中的Wi-Fi设置就是一个很好的例子。当您关闭Wi-Fi时,手机下方的部分会逐渐淡出并向上移动,直到消失。相反,当启用Wi-Fi时,它们会淡入。此外,Tweetbot 4在选择主题下的设置时,在显示设置中也能很好地做到这一点。启用时,两个单元格向上移动直到消失,然后一个单元格向下移动以取代其他两个单元格

我能够找到一个实现隐藏和显示细胞的方法,但是,它没有一个很好的动画。相反,细胞只是突然消失和重新出现

My tableView:heightForRowAtIndexPath:方法如下所示:

重写函数tableview tableview:UITableView,rowatindexpath索引路径高度xpath:nsindepath->CGFloat{ 如果indexath.row==1&&authenticationSettingsSwitch.on==false{ 返回0 } 如果indexath.row==2&&authenticationSettingsSwitch.on==false{ 返回0 } 返回44 } 如果开关打开,则两个单元格可见,高度为44。如果开关处于关闭状态,则两个单元格将以0的高度折叠

上述情况发生在my UISwitch的操作方法中:

@iAction func authenticationSettingsSwitchFlippedsender:UISwitch{ 让requireAuthentication=sender.on==true?true:false defaults.setBoolrequireAuthentication,forKey:Settings.Authentication.rawValue 默认值。同步 如果需要,请重新验证{ 延迟0.3{->Void in 让authenticationNavigationController=self.storyboard?.InstanceEviewController将authenticationNavigationController设置为!UINavigationController 让authenticationViewController=authenticationNavigationController.topViewController作为!authenticationViewController authenticationViewController.settingsDelegate=self self.presentViewControllerauthenticationNavigationController,动画:true,完成:nil } }否则{ tableView.reloadData } } 我还研究了tableView:insertRowsAtIndexPaths:withRowAnimation,但是,由于单元格是静态的,我一直因为试图在不使用数据源的情况下调用此方法而崩溃

下面是一些截图,可以帮助您更清楚地看到我想要什么:

如上所述,我可以在第一个单元格顶部的屏幕截图中通过UISwitch使单元格出现和消失,但它们是突然出现的。在Tweetbot 4的底部截图中,动画华丽而流畅


有人能告诉我如何实现我所追求的目标吗

我找到了一个解决方案,可以启用一个漂亮的动画来显示/隐藏静态UITableViewCells。

不知道如何使用静态单元格实现这一点。谢谢你的挑战。我确实花了几分钟时间,用动态单元压碎了一个例子。只是为了证明我能做到。我不确定这是否对你有帮助。