У меня есть UITableView
, который я использую для отображения настроек для моего приложения. То, что я хочу достичь, - это анимация двух UITableViewCell
s, когда значение UISwitch
изменяется.Анимация Вставка и удаление UITableViewCell через UISwitch
Несколько приятных примеров - настройки Wi-Fi в настройках iOS. Когда вы выключаете Wi-Fi, разделы ниже этой ячейки исчезают и вверх, пока они не исчезнут. И наоборот, они исчезают, когда Wi-Fi включен. Кроме того, Tweetbot 4 прекрасно это делает в настройках экрана при выборе параметра в разделе «Тема». Когда это разрешено, две клетки движутся вверх до тех пор, пока не исчезнут, а затем одна клетка движется вниз, чтобы занять место двух других ячеек.
Я смог найти tutorial with gifs для достижения скрытия и отображения ячеек, однако без анимации. Вместо этого клетки просто исчезают и появляются внезапно.
Мой tableView:heightForRowAtIndexPath:
метод выглядит следующим образом:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == 1 && authenticationSettingsSwitch.on == false {
return 0
}
if indexPath.row == 2 && authenticationSettingsSwitch.on == false {
return 0
}
return 44
}
Если переключатель включен, две клетки видны с высоты 44
. Если переключатель выключен, две ячейки сбрасываются с высотой 0
.
Вышеупомянутое происходит в методе действия моих UISwitch
«S:
@IBAction func authenticationSettingsSwitchFlipped(sender: UISwitch) {
let requireAuthentication = sender.on == true ? true : false
defaults.setBool(requireAuthentication, forKey: Settings.Authentication.rawValue)
defaults.synchronize()
if requireAuthentication {
delay(0.3) {() -> Void in
let authenticationNavigationController = self.storyboard?.instantiateViewControllerWithIdentifier("authenticationNavigationController") as! UINavigationController
let authenticationViewController = authenticationNavigationController.topViewController as! AuthenticationViewController
authenticationViewController.settingsDelegate = self
self.presentViewController(authenticationNavigationController, animated: true, completion: nil)
}
} else {
tableView.reloadData()
}
}
Я также смотрел на tableView:insertRowsAtIndexPaths:withRowAnimation
, однако, я получаю сбои в попытке вызвать этот метод без использования источника данных, так как клетки являются статическими.
Ниже приведены несколько скриншотов, которые могут помочь вам увидеть более ясно, что я хотел:
Как уже говорилось выше, я могу получить клетки появляются и исчезают через UISwitch
в первом cell (верхний набор скриншотов), но они делают это круто. В нижнем наборе скриншотов (Tweetbot 4) анимация великолепна и плавная.
Может ли кто-нибудь указать мне, как достичь того, что я хочу?
Не знаю, как это сделать со статическими ячейками. Спасибо за вызов, хотя. Я сделал несколько минут и раздавил пример с использованием динамических ячеек. Просто чтобы доказать, что я могу это сделать. Не уверен, что это поможет вам. https://github.com/regnerjr/HideAndShowTableViewCellsBasedOnSwitch – JMFR