ios - 使用 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 的子视图。
我期待看到滚动视图从黑色背景的视图开始,当我通过右边进行分页时,应该出现蓝色背景的视图。
当我运行它时,我看到的只是蓝色视图,我无法进行任何分页或滚动。
解决方案
推荐阅读
- rest - TFS Rest API - 放弃拉取请求
- python - Flask - Gevent - Pushbullet - Twilio - 此操作将永远阻塞
- wordpress - Wordpress 排除类别
- .net - 如何从接口动态创建模拟对象?
- javascript - Sublime Text 3 - jQuery 突出显示错误
- android - Deezer 播放流延迟
- java - 我选择的货币符号没有出现在屏幕上
- vuejs2 - 在 Vuetify 中为使用 prepend-icon 定义的图标设置样式
- docker - 在 Gitlab CI 中使用 docker 图像时,我如何尊重服务的别名
- angular - 插件 Base64 不适用于 ionic 3