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

Kav*_*gam 3 uiscrollview uikit ios cgrect 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)
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好但是当我滚动我的滚动视图时,这两个视图都回到了原来的位置.如何解决它.其默认y位置为SelectClientDetailView:400和SelectClientDetailView2:600

RMR*_*HUL 8

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

一些解决方案

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


Pau*_*tos 6

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

self.SelectClientDetailView.frame.origin.y = 637
self.SelectClientDetailView.frame.origin.y = 837
Run Code Online (Sandbox Code Playgroud)

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