2017-04-27 70 views
2

我在滚动视图中有两个子视图。我需要以编程方式定位这两个子视图。通过在DispatchQueue.main.async内编写代码,我做得正确。这里是代码:iOS Swift设置以编程方式查看帧位置

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

+0

您确定要将视图添加到scrollView而不是视图吗? – 7to4

+0

@ 7to4亚这两个意见都在滚动视图 –

回答

3

如果你只是想改变frame Y位置,试试这个:

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

前面已经提到的,你可能需要检查你的查看层次结构以确保实际上将它们添加到UIScrollView(而不是其他地方)。

+0

它的工作,但当我滚动我的滚动视图两个视图都回到旧的位置 –

+0

@KavinKumarArumugam你在哪里运行框架设置代码在你的问题? –

+0

'viewDidAppear'里面' –

4

如果您使用自动布局,那么设置框架会导致一些奇怪的效果。自动布局和帧不会放在一起。您需要重新排列约束,而不是帧。使用自动布局改变框架会导致一些奇怪的效果,并最终还原为您在原始UIView中创建的约束。

一些解决方案:

  1. 如果您想使用自动布局方法的话,你需要创建一个出口到每个约束就像你到一个视图,并在需要时改变其不变。
  2. 禁用该特定xib中的自动布局并开始播放帧。
+0

很高兴知道这个 :) – 7to4