Ios 高度约束动画';跳跃';

Ios 高度约束动画';跳跃';,ios,swift,autolayout,uicontrol,Ios,Swift,Autolayout,Uicontrol,我一直在创建自己的UIControl子类,以便在我的调整中使用。我已经完成了UIControl,除了展开/折叠动画。这个动画的问题是,它在展开/折叠时会向下/向上“跳跃”,而不是像我的原始模型那样平滑地展开(见下文) 我已将代码上载到GitHub存储库,找到了。可以找到将控件添加到superview的代码、设置高度约束的代码以及设置高度约束动画的代码 UIView.animate()可能有点棘手--您需要在正确的视图上调用.layoutifneed() 将iDUMenuButton中的isEx

我一直在创建自己的UIControl子类,以便在我的调整中使用。我已经完成了UIControl,除了展开/折叠动画。这个动画的问题是,它在展开/折叠时会向下/向上“跳跃”,而不是像我的原始模型那样平滑地展开(见下文)

我已将代码上载到GitHub存储库,找到了。可以找到将控件添加到superview的代码、设置高度约束的代码以及设置高度约束动画的代码

UIView.animate()
可能有点棘手--您需要在正确的视图上调用
.layoutifneed()

iDUMenuButton
中的
isExpanded/didSet
类替换为以下内容:

var isExpanded = false {
    didSet {
        if isExpanded != oldValue {
            if isExpanded {
                becomeFirstResponder()
                let haptics = UIImpactFeedbackGenerator(style: .rigid)
                haptics.impactOccurred()
            }
            guard let sv = self.superview else {
                // shouldn't happen, but let's be thorough
                fatalError("Self must have a superview!!!")
            }
            // not needed
            //self.layoutIfNeeded()
            UIView.animate(withDuration: 0.3) {
                self.heightConstraint.isActive = !self.isExpanded

                // call .layoutIfNeeded() on self's superview
                //self.layoutIfNeeded()
                sv.layoutIfNeeded()

                self.layer.shadowOpacity = self.isExpanded ? 1 : 0
                self.buttons.forEach { $0.setBadgeHidden(hidden: !self.isExpanded, animated: true) }
            }
            delegate?.menuButton(self, isExpandedDidUpdate: isExpanded)
        }
    }
}

谢谢我已经在这上面呆了一段时间了,所以我真的很高兴它被修复了!