【问题标题】:ScrollView does not scroll in iOSScrollView 在 iOS 中不滚动
【发布时间】:2017-07-30 22:59:48
【问题描述】:

我想让用户向左或向右滚动,但只能滚动一屏。

//
//  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")
                }
            }
        }
    }
}

这个控制器只做滚动工作。在滚动视图内部,有三个由其他控制器管理的容器视图。但这根本行不通。

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

另外,当控制器对它们不做任何事情时,我是否需要连接这三个 containerView?

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

EDIT2:我添加了一个视图,该视图的大小正是我希望 scrollView.contentSize 作为 scrollView 的直接子视图的大小。而且似乎解决了内容高度,因为它只是说内容宽度不明确。它想向我添加的视图添加前导和尾随约束,但我希望它在滚动视图中水平居中。现在我需要设置前导和尾随约束,让 autoLayout 知道 contentWidth。如何根据父视图的宽度设置前导和尾随偏移量,或者我应该做其他事情来解决这个问题?

【问题讨论】:

    标签: ios swift uiscrollview


    【解决方案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! 并固定适当的约束(前导、尾随、顶部、底部、等宽(应等于或大于to)、等高(应等于或大于to)。

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

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

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

    【讨论】:

    • 非常感谢您的回复。但我真的很抱歉,我不认为我理解你。你的意思是我不需要设置 scrollView 委托和 contentSize 还是我应该在其他地方设置它们?对于水平滚动,你的意思是我可以在情节提要中做到这一点吗?也许我的问题在于情节提要文件?
    • 是的,您可以在情节提要中进行操作而无需编写任何代码
    • 是的,您不需要设置 scrollView 委托和 contentSize
    • 我去掉了 1.contentSize 2.delegate 3.三个containerViews的出口。
    • 但现在没有任何变化。我想知道我是否需要在故事板中做一些额外的事情才能让它工作。另外,感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多