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

时间:2017-04-27 10:43:52

标签: ios swift uiscrollview uikit cgrect

我在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

2 个答案:

答案 0 :(得分:7)

如果您使用自动布局,则设置框架会产生一些奇怪的效果。自动布局和框架不会结合在一起。您需要重新排列约束,而不是帧。使用自动布局时,更改框架会产生一些奇怪的效果,最终会恢复到您在原始UIView中创建的约束。

一些解决方案:

  1. 如果您想使用Autolayout方法,则需要为每个约束创建一个插座,就像您对视图一样,并在需要时更改其常量。
  2. 禁用该特定xib中的自动布局并开始播放帧。

答案 1 :(得分:6)

如果您只想更改frame Y位置,请尝试改为:

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

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