// // SPExplorePageController.swift // Thimra // // Created by Overseas on 2025/4/21. // import UIKit class SPExplorePageController: SPViewController { private lazy var titles: [String] = { let arr = ["Shorts".localized, "All".localized] return arr }() private lazy var viewControllers: [SPViewController] = { let vc1 = SPExploreViewController() let vc2 = SPAllShortViewController() return [vc1, vc2] }() private lazy var itemWidthArr: [NSNumber] = { var arr: [NSNumber] = [] self.titles.forEach { var width = $0.size(font: .systemFont(ofSize: 14)).width + 16 if width < 50 { width = 50 } arr.append(NSNumber(value: width)) } return arr }() private lazy var menuWidth: CGFloat = { var width: CGFloat = 0.0 itemWidthArr.forEach { width += CGFloat($0.floatValue) } return width }() private lazy var pageView: WMPageController = { var itemWidthArr: [NSNumber] = [] self.titles.forEach { var width = $0.size(font: .systemFont(ofSize: 14)).width + 16 if width < 50 { width = 50 } itemWidthArr.append(NSNumber(value: width)) } let pageView = WMPageController() pageView.delegate = self pageView.dataSource = self pageView.titleSizeNormal = 14 pageView.titleSizeSelected = 14 pageView.titleColorNormal = .colorFFFFFF() pageView.titleColorSelected = .colorFFFFFF() pageView.progressColor = .colorFFFFFF(alpha: 0.22) pageView.menuViewStyle = .flood pageView.menuViewLayoutMode = .center pageView.itemsWidths = itemWidthArr pageView.progressHeight = 24 return pageView }() private lazy var menuBgView: UIView = { let view = UIView() view.addEffectView(style: .light) view.layer.cornerRadius = 15 view.layer.masksToBounds = true return view }() override func viewDidLoad() { super.viewDidLoad() _setupUI() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(true, animated: true) } } extension SPExplorePageController { private func _setupUI() { addChild(pageView) self.view.addSubview(self.pageView.view) self.pageView.view.addSubview(menuBgView) self.pageView.view.bringSubviewToFront(self.pageView.menuView!) self.pageView.view.snp.makeConstraints { make in make.edges.equalToSuperview() } menuBgView.snp.makeConstraints { make in make.center.equalTo(self.pageView.menuView!) make.width.equalTo(menuWidth + 8) make.height.equalTo(30) } } } //MARK: -------------- WMPageControllerDelegate & WMPageControllerDataSource -------------- extension SPExplorePageController: WMPageControllerDelegate, WMPageControllerDataSource { func pageController(_ pageController: WMPageController, preferredFrameForContentView contentView: WMScrollView) -> CGRect { return CGRect(x: 0, y: 0, width: kSPScreenWidth, height: kSPScreenHeight - kSPTabBarHeight) } func pageController(_ pageController: WMPageController, preferredFrameFor menuView: WMMenuView) -> CGRect { return CGRect(x: 0, y: kSPStatusbarHeight + 10, width: kSPScreenWidth, height: 30) } func pageController(_ pageController: WMPageController, titleAt index: Int) -> String { return titles[index] } func numbersOfChildControllers(in pageController: WMPageController) -> Int { return titles.count } func pageController(_ pageController: WMPageController, viewControllerAt index: Int) -> UIViewController { return viewControllers[index] } }