我无法完成这项工作,最好地解释了我正在尝试使用此故事板的图像。
主要目标是使该容器可滚动,其大小取决于通过代码添加到其中的视图控制器。
以下是我如何阐述自己的观点。
显然我的约束是弄乱我的,但不确定如何使它们按预期运行,我已经尝试将容器固定到滚动视图,然后滚动视图到主视图。屏幕显示我想要的方式,但它不会滚动。
非常感谢任何帮助!
答案 0 :(得分:0)
从你的问题&屏幕截图,以确定您实际设置的约束。而你的问题甚至没有特别明确你的约束是否表现得正常(除了滚动视图不滚动,这可能与约束有关,也可能没有)。
首先,我们需要确保我们的约束正确连接。您要将滚动视图放入其中的容器视图应具有四个约束。每边一个,左边和左边对,把它钉在那些边缘。一个用于底部将其固定到工具栏,另一个用于顶部将其固定到顶视图。它不需要任何更多约束。现在,底部的工具栏和顶部的视图需要设置其约束,以便每个设备/方向具有恒定的高度,而不关心容器视图的大小。如果正确设置了约束,则在界面构建器文件中调整此视图的大小应该是更改容器视图的大小。如果没有发生这种情况,请回到绘图板,因为有些事情不太正确。
如果您确信您的约束设置正确,那么滚动视图本身还有一些其他方面可能会阻止滚动。
首先,检查最明显。滚动视图上的滚动启用属性是否设置为true
?如果不是......当然不会滚动。
可能发生的另一件事是您的内容视图不大于滚动视图。确保您已正确设置滚动视图内容的自动布局,否则内容视图将不会大于滚动视图,也不会进行滚动。
答案 1 :(得分:0)
因此,对于任何想知道如何做到这一点的人,我终于想出了经过大量试验和错误后如何做到这一点。 基本上我所做的是从故事板中删除容器视图,像往常一样在滚动视图上设置我的约束:
然后在代码中添加了一个容器视图作为滚动视图的子视图:
var containerView : UIView!
var currentViewController: UIViewController
override func viewDidLoad() {
super.viewDidLoad()
self.containerView = UIView()
self.scrollView.addSubview(self.containerView)
}
使用我的UISegmentControl在不同的视图控制器之间切换,滚动视图滚动内容,无论新视图控制器有多大,我都在UISegmentControl函数中添加以下代码
@IBAction func segControlValueChanged(sender: AnyObject) {
if let vc = viewControllerForSelectedSegmentIndex(sender.selectedSegmentIndex) {
self.currentViewController!.view.removeFromSuperview()
self.currentViewController!.removeFromParentViewController()
displayCurrentTab(sender.selectedSegmentIndex)
}
}
func displayCurrentTab(tabIndex: Int){
if let vc = viewControllerForSelectedSegmentIndex(tabIndex) {
self.addChildViewController(vc)
self.containerView.addSubview(vc.view)
vc.didMoveToParentViewController(self)
vc.view.frame.size = CGSize(width: self.view.frame.width, height: vc.view.frame.height) //had to add this because otherwise for some reason my new vc width would not increase or decrease to its parent view
self.currentViewController = vc
self.scrollView.contentSize = vc.view.frame.size
}
}
func viewControllerForSelectedSegmentIndex(index: Int) -> UIViewController {
//instantiate and return your view controller here
}
其他一些说明: