iOS -AutoLayout 约束集激活在第二次崩溃

Posted

技术标签:

【中文标题】iOS -AutoLayout 约束集激活在第二次崩溃【英文标题】:iOS -AutoLayout constraint set active be crash in second time 【发布时间】:2015-04-27 14:34:18 【问题描述】:

我想实现一个功能,当我点击按钮时,图像会在两个按钮之间移动

我在图片和button2(centerX,which text with 222)之间设置了一个约束,同时我也用button1(centerX,which text with 11)设置了一个约束,并用950设置了优先级,然后我把它们拖到viewcontroller

这是我的故事板中的约束

这是我控制约束的代码

if NSFoundationVersionNumber > NSFoundationVersionNumber_ios_7_1 

            self.kidLeftCenterConstrait.active = isLeft
            self.kidRightCenterConstrait.active = !isLeft
            UIView.animateWithDuration(kAnimationDuration, animations:  () -> Void in
                self.view.layoutIfNeeded()
          )

        else 
            let constraintToRemove = isLeft ? self.kidRightCenterConstrait : self.kidLeftCenterConstrait
            let constriaintToUse = isLeft ? self.kidLeftCenterConstrait : self.kidRightCenterConstrait
            self.douBi.superview!.removeConstraint(constraintToRemove)
            self.douBi.superview!.removeConstraint(constriaintToUse)
            self.douBi.superview!.addConstraint(constriaintToUse)
            UIView.animateWithDuration(kAnimationDuration, animations:  () -> Void in
            self.view.layoutIfNeeded()
      )
 

在 iphone 中运行后 我点击按钮1图像移动到11,然后我点击按钮2,应用程序是现金self.kidRightCenterConstrait.active = !isLeft

控制台日志是fatal error:unexpectedly found nil while unwrapping an Optional value

【问题讨论】:

您是否有理由不使用removeConstraintaddConstraint 我试过了,在kidRightCenterConstrait 崩溃了得到nil 【参考方案1】:

看来约束被释放了。您可以尝试强烈保留您的约束:

@IBOutlet var kidLeftCenterConstrait: NSLayoutConstraint!
@IBOutlet var kidRightCenterConstrait: NSLayoutConstraint!

无论如何要小心可能的保留周期。检查您的 ViewController 是否在时机成熟时消失。

我通常做这种动画来管理所有涉及的约束。

【讨论】:

你会认为这会在文档中提到。

以上是关于iOS -AutoLayout 约束集激活在第二次崩溃的主要内容,如果未能解决你的问题,请参考以下文章

IOS模拟器问题应用程序仅在第二次启动时运行..

iOS:BrightCove 原生播放器在第二次播放相同的视频时抛出 `kBCOVPlaybackSessionLifecycleEventError`

IBM Worklight 6.0 - iOS 应用程序总是停留在第二次启动

iOS webview中的文本输入在第二次点击后不起作用

复制表时出现约束异常?

subprocess.run() 在第二次迭代中失败