iOS Swift 以编程方式设置视图框架位置

iOS Swift Setting View Frame Position Programmatically

我在滚动视图中有两个子视图。我需要以编程方式定位这两个子视图。我通过在 DispatchQueue.main.async 中编写代码正确地做到了这一点。这是代码:

DispatchQueue.main.async {
    self.SelectClientDetailView.frame = CGRect(x: 0, y: 637, width: self.SelectClientDetailView.frame.size.width, height: self.SelectClientDetailView.frame.size.height)
    self.SelectClientDetailView2.frame = CGRect(x: 0, y: 837, width: self.SelectClientDetailView2.frame.size.width, height: self.SelectClientDetailView2.frame.size.height)
}

它运行良好,但是当我滚动我的滚动视图时,这两个视图都回到了原来的位置。如何修复它。它的默认 y 位置将是 SelectClientDetailView:400 和 SelectClientDetailView2: 600

如果您只想更改 frame Y 位置,请尝试以下操作:

self.SelectClientDetailView.frame.origin.y = 637
self.SelectClientDetailView.frame.origin.y = 837

如前所述,您可能需要检查 视图层次结构 以确保您确实将它们添加到 UIScrollView(而不是其他地方)。

如果您使用的是自动布局,那么设置框架会导致一些奇怪的效果。 Auto Layout 和 Frames 不能并存。您需要重新排列约束,而不是框架。在使用自动布局时,更改框架会导致一些奇怪的效果,并最终会恢复到您在原始 UIView 中创建的约束。

一些解决方案:

  1. 如果你想使用自动布局方法,你需要为每个约束创建一个出口,就像你为视图创建出口一样,并在需要时更改其常量。
  2. 在特定的 xib 中禁用自动布局并开始使用框架。