【问题标题】:Swift: ScrollView Only Show Last View AddedSwift:ScrollView 仅显示添加的最后一个视图
【发布时间】:2020-06-30 01:00:55
【问题描述】:

我正在尝试使用 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)
}
}

【问题讨论】:

    标签: swift uiscrollview


    【解决方案1】:

    在设置背景颜色时,pages 变量中有错字。

    修复:请将 page1 替换为 page2 和 page3。

    page2.backgroundColor = .systemPurple

    page3.backgroundColor = .systemOrange

    【讨论】:

    • 哇哦!非常感谢!我一直专注于 setupScrollView 函数,甚至没有注意到那个小错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-15
    相关资源
    最近更新 更多