首页 > 解决方案 > 使用 ScrollView 直接使用情节提要而不是创建 .xib 文件进行分页

问题描述

提前抱歉,这是一个很长的问题,但我想尽我所能解释。

我需要为项目实施一个演练(首次启动指南),它只会在用户第一次启动应用程序时显示给用户。

我通过创建一个 .xib 文件来实现它,我只是通过创建引用 .xib 模型的对象来为我需要为演练实现的每个项目创建一个视图。

但是现在我需要在不使用 .xib 文件的情况下实现它,我需要通过情节提要来实现。这次我插入了一个滚动视图,然后我在其中放置了另一个视图,其中包含我需要的对象,例如(标签、图像视图、按钮等)但它不起作用,即使我可以创建所有通过复制滚动视图正下方的视图来创建对象。当我尝试使用创建的所有视图来扩展滚动视图的宽度以便进行分页时,它不会创建彼此相邻的每个视图,而只会显示模拟器中的最后一个对象(视图),因为它们垂直相加,我不能不分页。

现在我提供一些示例代码来展示我如何尝试实现它:

import UIKit

class DenemeViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var pageControl: UIPageControl!

@IBOutlet weak var repeatingView: UIView!

var viewArray = [UIView]()

override func viewDidLoad() {
    super.viewDidLoad()

    let temporaryView = repeatingView
    temporaryView?.backgroundColor = .black
    viewArray.append(temporaryView!)

    let temporaryViewTwo = repeatingView
    temporaryViewTwo?.backgroundColor = .blue
    viewArray.append(temporaryViewTwo!)

    pageControl.numberOfPages = viewArray.count
    pageControl.currentPage = 0
    view.bringSubview(toFront: pageControl)

    setupScrollView(items: viewArray)
}

func setupScrollView(items: [UIView]) {
    scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
    scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(items.count), height: view.frame.height)
    scrollView.isPagingEnabled = true

    for i in 0..<items.count {
        items[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
        scrollView.addSubview(items[i])
    }
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let pageIndex = round(scrollView.contentOffset.x/view.frame.width)
    pageControl.currentPage = Int(pageIndex)
}
}

如您所见,我首先通过引用“repeatingView”在 viewDidLoad 中创建两个不同的视图,“repeatingView”是情节提要上 scrollView 内视图的出口。然后我将它们返回到一个数组中,并尝试用视图实现 scrollView 的子视图。

我期待看到滚动视图从黑色背景的视图开始,当我通过右边进行分页时,应该出现蓝色背景的视图。

当我运行它时,我看到的只是蓝色视图,我无法进行任何分页或滚动。

故事板层次结构

标签: iosswiftuiscrollviewstoryboardpaging

解决方案


推荐阅读