2017-07-30 76 views
0

我想允许用户向左或向右滚动,但只向前滚动一个屏幕。ScrollView不会在iOS中滚动

// 
// MainViewController.swift 
// Calendar 
// 
// Created by Andy on 7/22/17. 
// Copyright © 2017 Andy. All rights reserved. 
// 

import UIKit 

class MainViewController: UIViewController, UIScrollViewDelegate { 


    @IBOutlet weak var ScrollView: UIScrollView!{ 
     didSet{ 
      ScrollView.delegate = self 
      ScrollView.contentSize = CGSize(width: ScrollView.frame.width * 3, height: ScrollView.frame.height) 
     } 
    } 

    @IBOutlet weak var center: UIView! 
    @IBOutlet weak var left: UIView! 
    @IBOutlet weak var right: UIView! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 



    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if let destination = segue.destination as? ReusableViewController { 
      if let identifier = segue.identifier{ 
       destination.currentYearOffSet = 0 
       destination.currentMonthOffSet = 0 
       switch identifier { 
       case "center": 
        destination.position = .center 
       case "left": 
        destination.position = .left 
       case "right": 
        destination.position = .right 
       default: 
        fatalError("Unexpected Segue Identifier") 
       } 
      } 
     } 
    } 
} 

这个控制器没有什么比得到滚动工作。在scrollview中有三个由其他控制器管理的containerView。但这根本行不通。

我已经做了以下解决问题,但徒劳无功:1.检查scrollView的内容大小。 2.连接控制器和三个containerViews。 3.设置scrollView委托,但我还没有实现任何方法(也许这是原因,但我不知道该怎么实现)

另外,当控制器什么都不做时,我需要连接这三个containerViews关于他们?

编辑:我删除了:1. contentSize 2. UIScrollViewDelegate 3.三个containerViews的插座。这确实使我的代码更好,但scrollView仍然无法滚动。

EDIT2:我添加一个视图,它正是我想要scrollView.contentSize作为scrollView的直接子视图的大小。内容高度似乎已经解决了,因为它只是说内容宽度不明确。它想为我添加的视图添加前后约束,但我希望它只是在scrollView中居中。现在我需要设置前后约束来让autoLayout知道contentWidth。我如何根据其超视图的宽度来设置前导和尾随offSet,或者我应该采取其他措施来解决此问题?

回答

1

你并不需要设置是这样的: -

@IBOutlet weak var ScrollView: UIScrollView!{ 
     didSet{ 
      ScrollView.delegate = self 
      ScrollView.contentSize = CGSize(width: ScrollView.frame.width * 3, height: ScrollView.frame.height) 
     } 
    } 

只要有插座@IBOutlet weak var ScrollView: UIScrollView!和牵制适当约束(前置,顶部,底部,等于宽度(应等于或大于更大) ,相等的高度(应该等于或大于)

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

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

注意: - 您可以根据您的要求使用两者或任意一种。

+0

我非常感谢您的回复。但我真的很抱歉,我不认为我理解你。你的意思是我不需要设置scrollView委托和contentSize,或者我应该把它们设置在别的地方?而对于水平滚动,你的意思是我可以在故事板内做到这一点?也许我的问题在于故事板文件? –

+0

是的,你可以做你的故事板内没有做任何代码 –

+0

是的,你不需要设置scrollView委托和contentSize –