ios - 如何在 iOS 中使用 swift 重新定位 View ?

标签 ios swift storyboard autolayout

我正在使用 Storyboard为我的应用程序构建 ui,并使用 swift & 我已经准备好了下面的布局,您可以在屏幕截图中看到。 enter image description here

我想隐藏包含 stop1 详细信息的 View ,并在运行时放置 stop2 View 来代替 stop1。

我正在使用以下代码来隐藏 stop1 并更新 stop2 的约束

    stop1Frame.hidden = true
    stop2Frame.updateConstraints()

请帮助我。

将 stop1 的高度限制设置为 0 有效,但在控制台中显示以下错误。

 2015-03-13 17:03:52.738 GroundSpan[5392:1777378] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
    (
    "<NSLayoutConstraint:0x7a644500 V:[UILabel:0x7a643d50'Please tap on + button to...'(63)]>",
    "<NSLayoutConstraint:0x7a64cb80 V:[UIView:0x7a63aaa0(0)]>",
    "<NSLayoutConstraint:0x7a64cc10 UILabel:0x7a632e20'Stop1'.top == UIView:0x7a63aaa0.topMargin>",
    "<NSLayoutConstraint:0x7a64d2b0 V:[UILabel:0x7a643d50'Please tap on + button to...']-(20)-|   (Names: '|':UIView:0x7a63aaa0 )>",
    "<NSLayoutConstraint:0x7a64d310 V:[UILabel:0x7a632e20'Stop1']-(NSSpace(8))-[UILabel:0x7a643d50'Please tap on + button to...']>")

Will attempt to recover by breaking constraint 

<NSLayoutConstraint:0x7a644500 V:[UILabel:0x7a643d50'Please tap on + button to...'(63)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2015-03-13 17:03:52.739 GroundSpan[5392:1777378] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7a64cb80 V:[UIView:0x7a63aaa0(0)]>",
    "<NSLayoutConstraint:0x7a64cc10 UILabel:0x7a632e20'Stop1'.top == UIView:0x7a63aaa0.topMargin>",
    "<NSLayoutConstraint:0x7a64d2b0 V:[UILabel:0x7a643d50'Please tap on + button to...']-(20)-|   (Names: '|':UIView:0x7a63aaa0 )>",
    "<NSLayoutConstraint:0x7a64d310 V:[UILabel:0x7a632e20'Stop1']-(NSSpace(8))-[UILabel:0x7a643d50'Please tap on + button to...']>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7a64d310 V:[UILabel:0x7a632e20'Stop1']-(NSSpace(8))-[UILabel:0x7a643d50'Please tap on + button to...']>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

最佳答案

根据 stop1 的高度约束创建一个 IBOutlet,以便您可以在代码中访问它。

要隐藏 stop1,请将其高度限制设置为 0,这样 stop2 就会向上移动。

@IBOutlet weak var stop1HeightConstraint: NSLayoutConstraint!
...

// in your function:
self.stop1HeightConstraint.constant = 0

UIView.animateWithDuration(0.4, animations: {
    self.view.layoutIfNeeded()
})

这一切都假设您已正确设置自动布局和约束。

关于ios - 如何在 iOS 中使用 swift 重新定位 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29030831/

相关文章:

ios - 我们如何禁用 future 日期并在 swift 中在日期标签下方传递副标题以及如何使用桥头

ios - JSQMessagesViewController 消息气泡对齐不规则

arrays - 如何使用 Swift 将字典添加到数组?

ios - UINavigationController 在 swift 3 中为 nil

ios - 如何在按下 Ctrl 键时在 XCode 中滚动 Storyboard

ios - Swift Real - 如何将数据附加到在不同类中创建的对象

ios - 使用 ABRecord 和 ARC 的潜在泄漏

ios - 混合和 super

iphone - 如何制作具有左推效果的自定义转场?

iOS Facebook 插屏广告