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 中创建的约束。
一些解决方案:
- 如果你想使用自动布局方法,你需要为每个约束创建一个出口,就像你为视图创建出口一样,并在需要时更改其常量。
- 在特定的 xib 中禁用自动布局并开始使用框架。
我在滚动视图中有两个子视图。我需要以编程方式定位这两个子视图。我通过在 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 中创建的约束。
一些解决方案:
- 如果你想使用自动布局方法,你需要为每个约束创建一个出口,就像你为视图创建出口一样,并在需要时更改其常量。
- 在特定的 xib 中禁用自动布局并开始使用框架。