首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在滚动视图中嵌入3个视图控制器

在滚动视图中嵌入3个视图控制器
EN

Stack Overflow用户
提问于 2017-07-30 09:21:52
回答 2查看 566关注 0票数 0

我想在滚动视图中添加3个视图控制器(snapchat风格)。下面的代码似乎工作得很好,但当我退出应用程序(转到主屏幕)并返回时,由于某种奇怪的原因,视图调整了大小。我尝试添加alignAllTop和alignAllBottom,但没有成功。你知道为什么会发生这种事吗?

代码语言:javascript
运行
复制
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

    self.mainScrollView.delaysContentTouches = false

    let v1 = storyboard.instantiateViewController(withIdentifier: "profileViewController") as! profileViewController

    self.addChildViewController(v1)
    self.mainScrollView.addSubview(v1.view)
    v1.didMove(toParentViewController: self)

    //--------

    let v2 : recordViewController = recordViewController(nibName: "recordViewController", bundle: nil)

    self.addChildViewController(v2)
    self.mainScrollView.addSubview(v2.view)
    v2.didMove(toParentViewController: self)

    //--------

    let v3 = storyboard.instantiateViewController(withIdentifier: "discoverViewController") as! discoverViewController

    self.addChildViewController(v3)
    self.mainScrollView.addSubview(v3.view)
    v3.didMove(toParentViewController: self)


    //--------
    var v1frame : CGRect = self.mainScrollView.bounds
    v1frame.origin.x = 0
    v1.view.frame = v1frame

    var v2frame : CGRect = self.mainScrollView.bounds
    v2frame.origin.x = self.view.frame.width
    v2.view.frame = v2frame

    var v3frame : CGRect = self.mainScrollView.bounds
    v3frame.origin.x = self.view.frame.width*2
    v3.view.frame = v3frame

    //v1.view.translatesAutoresizingMaskIntoConstraints = false

    let csH1 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllTop], metrics: [:], views: ["v": v1.view])
    let csH2 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllTop], metrics: [:], views: ["v": v2.view])
    let csH3 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllTop], metrics: [:], views: ["v": v3.view])

    let csB1 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllBottom], metrics: [:], views: ["v": v1.view])
    let csB2 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllBottom], metrics: [:], views: ["v": v2.view])
    let csB3 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllBottom], metrics: [:], views: ["v": v3.view])

    self.mainScrollView.addConstraints(csH1)
    self.mainScrollView.addConstraints(csH2)
    self.mainScrollView.addConstraints(csH3)

    self.mainScrollView.addConstraints(csB1)
    self.mainScrollView.addConstraints(csB2)
    self.mainScrollView.addConstraints(csB3)



    //UI
    self.mainScrollView.contentSize = CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
    self.mainScrollView.setContentOffset(CGPoint(x: self.view.frame.width, y: 0), animated: false)
EN

回答 2

Stack Overflow用户

发布于 2017-07-30 09:40:10

我建议在你的故事板内部视图控制器中添加一个固定了所有约束(前导、拖尾、顶部、底部)的scrollView,然后在scrollView中添加子视图。现在针对scrollView (前导、尾随、顶部、底部、等宽(应等于或大于)、等高(应等于或大于))固定了subView约束。

对于水平滚动,如果你想水平滚动然后也固定宽度约束,这是必需的,以避免自动布局错误,但内部占位符选中在构建时删除。

对于垂直滚动,如果您想要垂直滚动,然后还固定高度约束,这是必需的,以避免自动布局错误,但内部占位符选中在构建时删除。

注意:-您可以同时使用这两种方法,也可以使用任何一种

在此之后,在subView中添加三个subView,并相应地固定其约束。

最后,在三个子视图上加载三个视图控制器。

在这种方法中,维护起来会更容易,您不必处理太多代码。

票数 0
EN

Stack Overflow用户

发布于 2017-07-30 10:21:04

你必须将你的子视图限制在UIScrollView的内容上,这意味着你需要添加4个水平约束:

最左边的视图的左边缘应该等于superview

  • Second视图的左边缘应该等于第一个视图的右边缘,右边缘等于第三个视图的左edge.

  • Rightmost (第三)视图的右边缘应该等于
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45395512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档