2017-04-20 82 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,愉快的日子 –

相关问题