使用setContentOffset滚动到特定页面

时间:2017-03-28 02:55:39

标签: ios swift xcode swift3 uiscrollview

我正在为iPad pro 12.9创建一个家庭树应用程序。这是我在故事板中看到的布局。

Family Tree Layout

我创建了一个高视图控制器来保存该系列的3个图层,其中包含3个容器视图的滚动视图,可链接到更多视图控制器和滚动视图,以显示有关祖父母,父母和孩子的信息。

当用户从家谱中点击按钮到信息时,我遇到以编程方式滚动到右侧部分的问题。 我想要采取行动 点击人物按钮 - > segue到高视图控制器 - >滚动到滚动视图的右侧以进行垂直滚动 - >在祖父母/父/孩子滚动视图中滚动到正确的级别。

我为每个滚动视图设置了类,为视图控制器设置了类。

在TreeViewController.swift中我有

    @IBAction func sarah(_ sender: Any) {

    VerticalScrollView.contentOffset(CGPoint(x: 0, y: 1024), animated:false)
    performSegue(withIdentifier: "showPeople", sender: self)     
}

这是一个向下移动垂直视图控制器的按钮,然后执行segue。

我认为这是班级而不是班级的实例?我如何访问实例?我是以正确的方式来做这件事的吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

您需要在destinationViewController这样的内容上定义一个属性

var scrollTo : CGPoint?

然后,您必须使用prepareForSegue类似

TreeViewController方法实施
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showPeople"{
        if let fullTreeViewController = segue.destination as? FullTreeViewController{
            if(sender is btnSarah)
             {
                fullTreeViewController.scrollTo = CGPoint(x: 0, y: 1024)
             }
        }
    }
}

然后在destinationViewController

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
         if(self.scrollTo != nil){
            self.verticalScrollView.contentOffset(self.scrollTo, animated:false)
         }

    }

我希望这有助于你