2017-04-20 106 views
1

我有我的應用程序中的滾動視圖。默認y我的滾動視圖的位置是80。在某些位置,我需要將我的滾動視圖的y位置移動到0。這裏是代碼iOS Swift Scrollview以編程方式設置幀位置

@IBOutlet weak var ScrollView: UIScrollView! 
override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    self.ScrollView.delegate = self 
    if(Position == "changed") 
    { 
     self.ScrollView.frame = CGRect(x: 0, y: 0, width: self.ScrollView.frame.size.width, height: self.ScrollView.frame.size.height) 
    } 
    else 
    { 
     self.ScrollView.frame = CGRect(x: 0, y: 80, width: self.ScrollView.frame.size.width, height: self.ScrollView.frame.size.height) 
    } 
} 

但是這段代碼不起作用。

+0

結帳我的回答,可能會幫助您:http://stackoverflow.com/questions/39936110/how-to-load-a-uiviewcontroller-inside-an-uiscrollview/39937248#39937248 – Aakash

+0

當你想改變ScrollView的位置? –

+0

我正在從多個視圖中加載此同一頁面。如果位置值等於'changed',我需要更改位置 –

回答

0

我們將無法設置滾動型位置viewDidLoad()所以添加的代碼viewDidAppear()。最終代碼這裏

override func viewDidAppear(_ animated: Bool) 
{ 
    DispatchQueue.main.async 
    { 
      self.ScrollView.frame = CGRect(x: 0, y: 0, width: self.ScrollView.frame.size.width, height: self.ScrollView.frame.size.height + 80) 
    } 
} 
+0

如果你的VC嵌入導航控制器,UI將正確渲染你的概念,如果你一次導航另一個VC又回來了 –

1

問題很簡單沒有更新的viewDidLoad你VC.view,所以在這裏,你需要你的self.ScrollView.frameØ位置開始默認爲前進Viewdidappear的UI更新用或更新UI的主線程

,所以只能用檢查!=

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    self.ScrollView.delegate = self 
    //self.ScrollView.frame = CGRect(x: 0, y: 0, width: self.ScrollView.frame.size.width, height: self.ScrollView.frame.size.height) 
    if(Position != "changed") 
    { 
    DispatchQueue.main.async { 
     self.ScrollView.frame = CGRect(x: 0, y: 80, width: self.ScrollView.frame.size.width, height: self.ScrollView.frame.size.height) 
    } 

    } 

} 
+0

改變你的ScrollView的內容也 –

+0

它的工作原理,但我寫'viewDidAppear'裏面的代碼 –

+1

@KavinKumarArumugam - 選擇是urs,愉快的日子 –

相關問題