当前位置: 首页 > 知识库问答 >
问题:

更改约束时self.view.layoutIfNeed()做什么

牛兴安
2023-03-14

所以我正在学习如何使视图从屏幕外变成动画,用作滑块菜单。

class ViewController: UIViewController {
    @IBOutlet weak var red: UIView!
    @IBOutlet weak var redHConstraint: NSLayoutConstraint!

    @IBAction func buttonShift(sender: AnyObject) {
        self.view.layoutIfNeeded()        // **HERE**
        UIView.animateWithDuration(0.5) {
            self.redHConstraint.constant = 0
            self.view.layoutIfNeeded()    // And **HERE**
        }
    }

}

我改编了这段代码,从如何在Swift中使用约束对UIView进行动画制作?

什么是自我。看法layoutIfNeeded()部分代码如何?

2.为什么在动画之前和期间编码为2x?

注:如果我注释掉第一个自我。看法layoutIfNeeded()没有任何变化,但如果我注释掉第二个self。看法layoutIfNeeded()移动不再设置动画,而是显示在新的坐标中。

共有1个答案

郜驰
2023-03-14

如果对的setsetNeedsLayout做了一些更改,那么调用self.view.layoutIfNeed()将强制self.view及其子视图的布局self.view。

setNeedsLayout用于设置一个标志,即每当调用LayoutIneed()时,都会调用layoutSubviews。它决定了通话的“如果需要”方面。

如果对UIView进行更改,导致其设置为setNeedsLayout,但未调用(因此未调用layoutSubviews),它将不会更新,因此可能会导致动画问题。如果您提前调用它,它将确保如果有需要更新布局的更改,那么它将在设置动画之前将其应用于视图及其所有子视图。

当然,在设置动画时,您正在进行需要更新的更改。

 类似资料:
  • 我希望将clob列的约束更改为约束。但是,当尝试 或 我做错了什么?在这种情况下,我也必须使用临时栏吗?我知道使用temp列将数据类型从clob更改为varchar2的场景,但这里我只想更改约束。为什么这是不可能的? 提前感谢!

  • 我正在将错误消息添加到登录屏幕。 虽然代码运行良好,并且执行我希望它执行的操作。它会在执行时导致约束错误。 以下是受影响的约束: 下面是导致errorView出现的函数。 如何在不破坏约束的情况下更改约束? 我尝试self.view.update约束()-但是什么也没有做。我还尝试在添加约束之前删除它们,但是仍然有一个错误。 任何帮助都将不胜感激! 编辑: 我找到了一个Objective-c解决方

  • 我有一个表格视图,里面有一个单元格。单元格包含三个标签:标题标签和下面两个相互对应的标签。有时,如果这两个标签不包含数据,我需要隐藏下面这两个标签,并将“标题标签”的“顶部空间到容器”更改为“中心Y到容器”。当然,当两个标签包含数据时,还会恢复约束。这是一个简单演示项目的截图,只是为了展示这个想法: 更新马克斯·麦克劳德的回答指向了正确的方向。技巧是在第一个和第二个标签隐藏时向下推标题标签。所以,

  • 我正在用更新一个旧的应用程序,当没有广告时,它就会滑出屏幕。当有广告时,它会在屏幕上滑动。基本的东西。 老风格,我设置了一个动画块的框架。新样式中,我有一个到auto-layout约束,它确定位置,在本例中是距离超级视图底部的距离,并修改常数: 和预期的一样,但没有动画。 更新:我重新观看了WWDC12讨论的最佳实践,以掌握自动布局,其中包括动画。它讨论了如何使用CoreAnimation更新约束

  • 问题内容: 我沿着一个容器的底部布置了几个。我希望这些视图的宽度始终相等,并始终拉伸以共同填充包含视图的宽度(如底部的表情符号键盘按钮)。我要解决的方法是为其中一个视图设置相等的宽度,然后仅将该视图的宽度约束更新为,这将导致所有其他视图更新为相同的值。 我想知道更改约束常数的代码应该放在哪里。需要在键盘首次出现在屏幕上之前进行设置,并在旋转设备时进行更新。 我第一次尝试解决方案是将其放入并通过计算

  • 问题内容: 从这个答案: 这是被接受的答案建议为您的视图变化设置动画: 不 更改框架时为什么要打电话。我们正在更改约束,所以(根据[另一个答案]我们不应该打电话吗? 如果以后发生的更改使您的约束之一无效,则应立即删除约束并调用setNeedsUpdateConstraints 观察结果: 我实际上确实尝试过同时使用它们。使用我的视图 可以向右正确设置动画 但是,使用 不会 设置动画,它只是将视图