ViewController UIScrollView 中的约束,使用 Storyboard
ViewController constraints in UIScrollView, using Storyboard
我有两个 UIViewControllers
,故事板标识符 "vc0" 和 "vc1",我试图在启用分页的情况下实例化 UIScrollView
中的对象,以便这两个视图控制器彼此相邻。目标是让用户左右滑动以在视图控制器之间滑动,类似于 SnapChat。
当运行我的代码时,滚动视图的第一页包含第一个视图控制器,而第二页根本不包含任何内容。我假设这是因为第一个视图控制器与第二个视图控制器重叠。我怎样才能改变我的约束(或任何东西)来解决这个问题,以便 vc0 的右边缘与 vc1 的左边缘相交?
UIScrollView 包含在 UIView 中,在视图控制器中。这是包含所有相关代码的 viewDidLoad()。请让我知道我应该提供的任何其他有用信息。
override func viewDidLoad()
{
super.viewDidLoad()
let screenWidth = self.view.frame.width
let screenHeight = self.view.frame.height
let vc0 = self.storyboard?.instantiateViewControllerWithIdentifier("vc0")
self.addChildViewController(vc0!)
self.scrollView.addSubview(vc0!.view)
vc0!.didMoveToParentViewController(self)
let vc1 = self.storyboard?.instantiateViewControllerWithIdentifier("vc1")
var frame1 = vc1!.view.frame
frame1.origin.x = self.view.frame.size.width
vc1!.view.frame = frame1
self.addChildViewController(vc1!)
self.scrollView.addSubview(vc1!.view)
vc1!.didMoveToParentViewController(self)
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height);
//ADD CONSTRAINTS TO vc0
vc0!.view.translatesAutoresizingMaskIntoConstraints = false
let horizontalConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0)
view.addConstraint(horizontalConstraint)
let widthConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenWidth)
view.addConstraint(widthConstraint)
let heightConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenHeight)
view.addConstraint(heightConstraint)
//ADD CONSTRAINTS TO vc1
vc1!.view.translatesAutoresizingMaskIntoConstraints = false
let horizontalConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: vc0!.view, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
view.addConstraint(horizontalConstraint2)
let widthConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenWidth)
view.addConstraint(widthConstraint)
let heightConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenHeight)
view.addConstraint(heightConstraint)
}
我觉得约束有问题!!
您应该将 view
添加到 scrollview
,然后将 add views of both VC
添加到该视图而不是直接滚动视图。
视图的大小应与 scrollview's contentsize
相同
现在你的约束应该是这样的:
滚动视图:顶部、底部、前导、尾随
在滚动视图中查看:顶部、底部、前导、尾随,容器中的垂直中心(中心 Y)和固定宽度(因为你想要水平滚动),如果想要垂直滚动那么约束应该是(容器中的水平中心(中心 X)和固定高度)。
并且您从两个 VC 观看:顶部、前导、固定宽度、固定高度(宽度和高度应与屏幕尺寸相同)
希望这会有所帮助:)
我有两个 UIViewControllers
,故事板标识符 "vc0" 和 "vc1",我试图在启用分页的情况下实例化 UIScrollView
中的对象,以便这两个视图控制器彼此相邻。目标是让用户左右滑动以在视图控制器之间滑动,类似于 SnapChat。
当运行我的代码时,滚动视图的第一页包含第一个视图控制器,而第二页根本不包含任何内容。我假设这是因为第一个视图控制器与第二个视图控制器重叠。我怎样才能改变我的约束(或任何东西)来解决这个问题,以便 vc0 的右边缘与 vc1 的左边缘相交?
UIScrollView 包含在 UIView 中,在视图控制器中。这是包含所有相关代码的 viewDidLoad()。请让我知道我应该提供的任何其他有用信息。
override func viewDidLoad()
{
super.viewDidLoad()
let screenWidth = self.view.frame.width
let screenHeight = self.view.frame.height
let vc0 = self.storyboard?.instantiateViewControllerWithIdentifier("vc0")
self.addChildViewController(vc0!)
self.scrollView.addSubview(vc0!.view)
vc0!.didMoveToParentViewController(self)
let vc1 = self.storyboard?.instantiateViewControllerWithIdentifier("vc1")
var frame1 = vc1!.view.frame
frame1.origin.x = self.view.frame.size.width
vc1!.view.frame = frame1
self.addChildViewController(vc1!)
self.scrollView.addSubview(vc1!.view)
vc1!.didMoveToParentViewController(self)
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height);
//ADD CONSTRAINTS TO vc0
vc0!.view.translatesAutoresizingMaskIntoConstraints = false
let horizontalConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0)
view.addConstraint(horizontalConstraint)
let widthConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenWidth)
view.addConstraint(widthConstraint)
let heightConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenHeight)
view.addConstraint(heightConstraint)
//ADD CONSTRAINTS TO vc1
vc1!.view.translatesAutoresizingMaskIntoConstraints = false
let horizontalConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: vc0!.view, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
view.addConstraint(horizontalConstraint2)
let widthConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenWidth)
view.addConstraint(widthConstraint)
let heightConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenHeight)
view.addConstraint(heightConstraint)
}
我觉得约束有问题!!
您应该将 view
添加到 scrollview
,然后将 add views of both VC
添加到该视图而不是直接滚动视图。
视图的大小应与 scrollview's contentsize
现在你的约束应该是这样的:
滚动视图:顶部、底部、前导、尾随
在滚动视图中查看:顶部、底部、前导、尾随,容器中的垂直中心(中心 Y)和固定宽度(因为你想要水平滚动),如果想要垂直滚动那么约束应该是(容器中的水平中心(中心 X)和固定高度)。
并且您从两个 VC 观看:顶部、前导、固定宽度、固定高度(宽度和高度应与屏幕尺寸相同)
希望这会有所帮助:)