2017-04-27 85 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

相關問題