我在scrollview中具有两个子视图。我需要以编程方式定位两个子视图。我通过在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
如果您使用的是自动布局,则设置框架会引起一些奇怪的效果。自动布局和框架不会在一起。您需要重新排列约束,而不是框架。使用自动布局更改框架时,会引起一些奇怪的效果,并最终还会回到您在原始Uiview中创建的约束。
一些解决方案:
- 如果您想使用自动划分方法,那么您需要像视图一样创建每个约束的插座,并在需要时更改其常数。
- 在该特定XIB中禁用自动布局,然后开始使用帧。
如果您只想更改frame
y位置,请尝试以下操作:
self.SelectClientDetailView.frame.origin.y = 637
self.SelectClientDetailView.frame.origin.y = 837
如前所述,您可能需要检查查看层次结构以确保实际上将它们添加到UIScrollView
(而不是其他地方(。