You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中隐藏UIView在Segue时短暂显示问题求助

解决滑动菜单Segue前短暂显示的问题

我来帮你捋一捋这个问题~ 你遇到的情况应该是动画完成的回调和Segue执行的时机没有完全同步,导致菜单还没彻底隐藏就开始页面跳转,所以出现了短暂的显示。下面给你几个可行的解决方案:

方案1:动画结束后强制隐藏侧视图再执行Segue

在动画完成的闭包里,先把侧视图设置为完全隐藏(比如直接设isHidden或者强制更新frame到目标位置),再调用Segue,确保视图状态已经到位:

@IBAction func socialMediaButton(_ sender: UIButton) {
    sideview.animator.move(x: -320).easeInOutSine.animate(t: 1.0) {
        // 先强制把侧视图移到不可见区域,同时隐藏
        self.sideview.frame.origin.x = -320
        self.sideview.isHidden = true
        self.performSegue(withIdentifier: "gotoSocialMedia", sender: self)
    }
    collapseButton.animator.rotate(angle: -90).easeInOutSine.animate(t: 0.5)
}

方案2:延迟一点点执行Segue

有时候动画的回调可能会稍微提前触发(比如动画的最后一帧还没渲染完成),这时候可以给Segue加个极短的延迟,让视图彻底完成渲染:

@IBAction func socialMediaButton(_ sender: UIButton) {
    sideview.animator.move(x: -320).easeInOutSine.animate(t: 1.0) {
        self.sideview.alpha = 0
        // 延迟0.1秒执行Segue,给视图渲染留时间
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            self.performSegue(withIdentifier: "gotoSocialMedia", sender: self)
        }
    }
    collapseButton.animator.rotate(angle: -90).easeInOutSine.animate(t: 0.5)
}

方案3:在Segue准备阶段强制隐藏侧视图

你之前尝试的viewWillDisappear可能因为调用时机问题没生效,可以试试在prepare(for:sender:)里设置侧视图状态,这个方法会在Segue执行前被调用:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "gotoSocialMedia" {
        sideview.alpha = 0
        sideview.isHidden = true
        // 也可以直接设置frame确保位置正确
        sideview.frame.origin.x = -320
    }
}

额外小提示

如果ChainableAnimations的动画回调时机不太可靠,你也可以换成原生的UIView.animate方法,它的completion回调时机更稳定:

@IBAction func socialMediaButton(_ sender: UIButton) {
    UIView.animate(withDuration: 1.0, delay: 0, options: .curveEaseInOut) {
        self.sideview.frame.origin.x = -320
    } completion: { _ in
        self.sideview.isHidden = true
        self.performSegue(withIdentifier: "gotoSocialMedia", sender: self)
    }
    
    UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut) {
        self.collapseButton.transform = CGAffineTransform(rotationAngle: -CGFloat.pi/2)
    }
}

内容的提问来源于stack exchange,提问作者askaale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:23:55