【问题标题】:Adding a view causes constraints in Storyboard to update添加视图会导致 Storyboard 中的约束更新
【发布时间】:2020-06-12 15:40:37
【问题描述】:

我创建了一个 UIScrollView 并在情节提要中设置了它的约束,但我有时会在运行时将 UIScrollView 移动到不同的位置。

我的问题发生在我以编程方式创建自定义 UIView 并将其添加到主 UIView 时。我的约束将更新,如果我的 UIScrollView 不在同一位置,它将被移动到情节提要设置。

例如,假设我的 UIScrollView 固定在屏幕顶部,然后在运行时将其移动到屏幕底部。如果我执行这段代码:

  let menu = UIView()
  menu.frame.size = CGSize(width: 210, height: 80)
  menu.center = view.center
  view.addSubview(menu)

我的 UIScrollView 将移回屏幕上的点击。我尝试了这个,但它不起作用:

  myScrollView.constraints.first?.isActive = false

【问题讨论】:

  • “但我有时会在运行时将 UIScrollView 移动到不同的位置” -- 你是怎么做到的?听起来您正在运行时更改滚动视图的 frame,而不是更新其约束(例如设置 .constant 值)。
  • 我正在移动框架。我不知道我可以移动约束?我不熟悉约束
  • 正如@DonMag 所说,当您使用约束时,您不应该更新帧值,而是应该更新constraint.constant。您可以将约束中的@IBOutlet 连接到您的代码,然后在代码中对其进行操作。 (如果你愿意,你也可以为它制作动画,但动画约束它比普通帧有点棘手)

标签: ios swift uiview uiscrollview constraints


【解决方案1】:

使用自动布局和约束时,您无法通过显式设置view.frame 来更改帧。

如果您尝试这样做,那么在下一次 UI 更新时,自动布局会将视图重置为其约束。

如果您需要在运行时移动/调整视图大小,您需要引用已设置的约束,然后修改约束。

例如,如果您的滚动视图被限制在距视图顶部 20 点的位置,而您希望在运行时将其向下移动 50 点...

  • 为顶部约束创建一个IBOutlet
  • 在代码中,使用myTopConstraint.constant = 70.0

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 2014-02-07
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多