ScrollView不会在iOS中滚动

时间:2017-07-30 22:59:49

标签: ios swift uiscrollview

我希望允许用户向左或向右滚动但只能向远处滚动一个屏幕。

//
//  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委托但我还没有实现任何方法。(也许这是原因,但我不知道要实现什么)

另外,当控制器对它们一无所知时,我是否需要连接这三个containerView?

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

EDIT2:我添加了一个视图,其大小与我想要的scrollView.contentSize一样,是scrollView的直接子视图。而且似乎内容高度已经解决,因为它只是说内容宽度不明确。它想要向我添加的视图添加前导和尾随约束,但我希望它只是在scrollView中水平居中。现在我需要设置前导和尾随约束,让autoLayout知道contentWidth。如何根据超级视图的宽度设置前导和尾随offSet,或者我应该做些什么来解决这个问题?

1 个答案:

答案 0 :(得分: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!并固定适当的约束(前导,尾随,顶部,底部,相等的宽度(应该等于或大于),相等的高度(应该等于或大于)。

对于水平滚动 如果您想要水平滚动然后还要固定宽度约束,则需要避免自动布局错误,但在占位符选中时需要在构建时删除。

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

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