Ячейка TableView не меняет высоту во время анимации выпадающего UIView - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть раскрывающийся список анимации UIView при нажатии. я хочу добиться того, чтобы высота UIView менялась, когда я нажимал на ячейку tableView, и автоматически следовал за высотой. это мой код

class SubjectCell: BaseCell {
    lazy var tableView: UITableView = {
            let tv = UITableView()
            tv.delegate = self
            tv.dataSource = self
            tv.allowsSelection = false
            return tv
     }()

extension SubjectCell: UITableViewDelegate {
     func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

            return 80
     }

     func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
            return UITableView.automaticDimension
     }
}

// This is the view I want to animate
@IBOutlet weak var mainContainer: UIView!
    @IBOutlet weak var calendarView: JKCalendar!
    @IBOutlet weak var arrowImageView: UIImageView!

    @IBOutlet weak var mainContainerHeightConstraint: NSLayoutConstraint!

    override func awakeFromNib() {
        super.awakeFromNib()
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        mainContainer.addGestureRecognizer(tapGesture)
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    @objc func handleTap(gesture: UITapGestureRecognizer) {
        if mainContainerHeightConstraint.constant == 75 {
            UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
                self.arrowImageView.image = #imageLiteral(resourceName: "up-chevron")
                self.mainContainerHeightConstraint.constant = 370
                self.calendarView.alpha = 1
            })
        } else {
            defaultConstraint()
        }
    }

    fileprivate func defaultConstraint() {
        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
            self.arrowImageView.image = #imageLiteral(resourceName: "down-chevron")
            self.mainContainerHeightConstraint.constant = 75
            self.calendarView.alpha = 0
        })
    }

это моя конфигурация для uiview.

dynamicCell

Я установил свой mainContainerView сверху, ведя, и трейлинг = 0. и высота = 370.

внутри mainContainerView есть стека ViewView, содержащий еще 2 представления, и установите мой вид стека сверху, трейлинг, низ и ведущий = 0 в mainContainerView

это результат в моем симуляторе subjectAbsence

Я до сих пор не могу понять, как настроить tableViewCell, чтобы он автоматически менялся. Пожалуйста, помогите мне:)

1 Ответ

1 голос
/ 06 февраля 2020

Необходимо установить нижнее ограничение mainContainerView, чтобы высота строки была рассчитана на основе ваших ограничений, и удалите функцию heightForRowAt. И другое - каждый раз, когда вы меняете высоту вашего mainContainerView, вам нужно позвонить

tableView.beginUpdates()
tableView.endUpdates()

, чтобы он пересчитал новую высоту вашего ряда, и он будет применяться.

...