为什么触发展开的按钮会立即消失?

时间:2016-02-28 21:46:52

标签: ios swift uiviewcontroller uistoryboard uistoryboardsegue

我正在开发一个应用程序,我使用自定义segues在两个UIViewController之间导航。

第二个UIViewController的segue就好了。但是当触发展开segue时,触发它的按钮会立即消失,同时慢慢为其他动画制作动画。

Gif of the animation

按钮是通过Storyboard设置的,然后我从它拖动到UIViewController的退出。一个展开的segue出现了,我设置了所有必要的文件。

我将自定义类分配给Unwind segue,现在覆盖perform() - 方法,如下所示:

override func perform() {

    let settingsVCView = self.sourceViewController.view
    let startVCView = self.destinationViewController.view

    let screenHeight = UIScreen.mainScreen().bounds.size.height
    let screenWidth = UIScreen.mainScreen().bounds.size.width

    let window = UIApplication.sharedApplication().keyWindow
    window?.insertSubview(startVCView, aboveSubview: settingsVCView)

    UIView.animateWithDuration(0.8, delay: 0, options: .CurveEaseInOut, animations: { () -> Void in

            settingsVCView.frame = CGRectMake(0, -(screenHeight), screenWidth, screenHeight)
            startVCView.frame = CGRectMake(0, 0, screenWidth, screenHeight)

        }) { (finished) -> Void in

            self.sourceViewController.dismissViewControllerAnimated(false, completion: nil)

    }

}

一切都已设置好,动画就像你在gif中看到的那样完成。有些人会说动画现在可以正常工作,但是那个按钮的早期消失真的让我烦恼。我试过了:

  • 调整按钮突出显示状态
  • 不仅在Compact / Regular中安装按钮
  • 将按钮类型从系统设置为自定义
  • 试图追踪确切的时刻,按钮通过断点消失(无法找到它,但发现,在封闭块中设置帧也不是问题)
  • 注释掉dismissViewControllerAnimated:功能

我没有找到任何解决方案。

1 个答案:

答案 0 :(得分:0)

我终于通过首先清除该Button的所有布局约束来解决问题。然后我再次点击它并且它没有消失,所以它与约束有关。

This is what the constraint should be set like.

错误是将按钮的顶部约束固定到顶部布局指南而不是视图顶部。更改此锚点解决了我的问题,我的Button停止隐藏:)