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



我在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中创建的约束。

一些解决方案:

  1. 如果您想使用自动划分方法,那么您需要像视图一样创建每个约束的插座,并在需要时更改其常数。
  2. 在该特定XIB中禁用自动布局,然后开始使用帧。

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

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

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

最新更新