我想在滚动视图中添加3个视图控制器(snapchat风格)。下面的代码似乎工作得很好,但当我退出应用程序(转到主屏幕)并返回时,由于某种奇怪的原因,视图调整了大小。我尝试添加alignAllTop和alignAllBottom,但没有成功。你知道为什么会发生这种事吗?
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)发布于 2017-07-30 09:40:10
我建议在你的故事板内部视图控制器中添加一个固定了所有约束(前导、拖尾、顶部、底部)的scrollView,然后在scrollView中添加子视图。现在针对scrollView (前导、尾随、顶部、底部、等宽(应等于或大于)、等高(应等于或大于))固定了subView约束。
对于水平滚动,如果你想水平滚动然后也固定宽度约束,这是必需的,以避免自动布局错误,但内部占位符选中在构建时删除。
对于垂直滚动,如果您想要垂直滚动,然后还固定高度约束,这是必需的,以避免自动布局错误,但内部占位符选中在构建时删除。
注意:-您可以同时使用这两种方法,也可以使用任何一种
在此之后,在subView中添加三个subView,并相应地固定其约束。
最后,在三个子视图上加载三个视图控制器。
在这种方法中,维护起来会更容易,您不必处理太多代码。
发布于 2017-07-30 10:21:04
你必须将你的子视图限制在UIScrollView的内容上,这意味着你需要添加4个水平约束:
最左边的视图的左边缘应该等于superview
https://stackoverflow.com/questions/45395512
复制相似问题