Swift: ScrollView 仅显示最后添加的视图
Swift: ScrollView Only Show Last View Added
我正在尝试使用 scrollView 重新创建 UIPageController,以便在手势识别方面更加灵活。一切正常,例如分页,但目前,我的 scrollView 仅将 page3 显示为第一页。我错过了什么?谁能帮帮我?
let scrollView = UIScrollView()
let pageControl = UIPageControl()
var pages: [UIView] {
get {
let page1 = UIView()
page1.backgroundColor = .systemBlue
let page2 = UIView()
page1.backgroundColor = .systemPurple
let page3 = UIView()
page1.backgroundColor = .systemOrange
return [page1, page2, page3]
}
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(scrollView)
scrollView.backgroundColor = .systemRed
scrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor, padding: .init(top: 0, left: 0, bottom: 0, right: 0))
view.addSubview(pageControl)
//BringSubViewToFront makes sures its always up front
view.bringSubviewToFront(pageControl)
pageControl.anchor(top: nil, leading: view.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.trailingAnchor)
setupScrollView(pages: pages)
pageControl.numberOfPages = pages.count
pageControl.currentPage = 0
}
fileprivate func setupScrollView(pages: [UIView]) {
scrollView.delegate = self
scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(pages.count), height: view.frame.height)
scrollView.isPagingEnabled = true
//Disables vertical scrolling and horizontal bounces
scrollView.contentSize.height = 1
scrollView.bounces = false
for i in 0..<pages.count {
pages[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
scrollView.addSubview(pages[i])
}
}
}
extension ChartViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let pageIndex = round(scrollView.contentOffset.x / view.frame.width)
pageControl.currentPage = Int(pageIndex)
}
}
设置背景颜色时页面变量中有错字。
修复:请将 page1 替换为 page2 和 page3。
page2.backgroundColor = .systemPurple
page3.backgroundColor = .systemOrange
我正在尝试使用 scrollView 重新创建 UIPageController,以便在手势识别方面更加灵活。一切正常,例如分页,但目前,我的 scrollView 仅将 page3 显示为第一页。我错过了什么?谁能帮帮我?
let scrollView = UIScrollView()
let pageControl = UIPageControl()
var pages: [UIView] {
get {
let page1 = UIView()
page1.backgroundColor = .systemBlue
let page2 = UIView()
page1.backgroundColor = .systemPurple
let page3 = UIView()
page1.backgroundColor = .systemOrange
return [page1, page2, page3]
}
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(scrollView)
scrollView.backgroundColor = .systemRed
scrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor, padding: .init(top: 0, left: 0, bottom: 0, right: 0))
view.addSubview(pageControl)
//BringSubViewToFront makes sures its always up front
view.bringSubviewToFront(pageControl)
pageControl.anchor(top: nil, leading: view.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.trailingAnchor)
setupScrollView(pages: pages)
pageControl.numberOfPages = pages.count
pageControl.currentPage = 0
}
fileprivate func setupScrollView(pages: [UIView]) {
scrollView.delegate = self
scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(pages.count), height: view.frame.height)
scrollView.isPagingEnabled = true
//Disables vertical scrolling and horizontal bounces
scrollView.contentSize.height = 1
scrollView.bounces = false
for i in 0..<pages.count {
pages[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
scrollView.addSubview(pages[i])
}
}
}
extension ChartViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let pageIndex = round(scrollView.contentOffset.x / view.frame.width)
pageControl.currentPage = Int(pageIndex)
}
}
设置背景颜色时页面变量中有错字。
修复:请将 page1 替换为 page2 和 page3。
page2.backgroundColor = .systemPurple
page3.backgroundColor = .systemOrange