From f9f5b83e204719ee4a765c20bce4922cdb77cbb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BE=9C=E5=A3=B0=E4=B8=96=E7=BA=AA?= <> Date: Thu, 25 Dec 2025 10:14:38 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReaderHive.xcodeproj/project.pbxproj | 4 + ...xploreNovelContentListViewController.swift | 107 +++++++++++------- .../M/NRHomeMustReadTodayTransformer.swift | 47 ++++++++ .../Home/V/NRHomeNovelMustReadTodayCell.swift | 61 +++++----- .../Home/V/NRHomeNovelMustReadTodayView.swift | 98 ++++++++-------- .../Novel/M/NRReadChapterCatalogModel.swift | 2 +- .../Class/Novel/M/NRReadChapterModel.swift | 2 +- .../Class/Novel/VM/NRNovelReadViewModel.swift | 8 +- .../Source/en.lproj/Localizable.strings | 2 +- 9 files changed, 206 insertions(+), 125 deletions(-) create mode 100644 ReaderHive/Class/Home/M/NRHomeMustReadTodayTransformer.swift diff --git a/ReaderHive.xcodeproj/project.pbxproj b/ReaderHive.xcodeproj/project.pbxproj index e52e55b..7cde11c 100644 --- a/ReaderHive.xcodeproj/project.pbxproj +++ b/ReaderHive.xcodeproj/project.pbxproj @@ -89,6 +89,7 @@ 85606A9F2EEBE95A005D989D /* NRDashedLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85606A9E2EEBE95A005D989D /* NRDashedLineView.swift */; }; 85859E5C2EF3FC5F0020D282 /* NotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 85859E552EF3FC5F0020D282 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 85859E662EF3FC6E0020D282 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85859E632EF3FC6E0020D282 /* NotificationService.swift */; }; + 85859E682EFCD1D80020D282 /* NRHomeMustReadTodayTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85859E672EFCD1D80020D282 /* NRHomeMustReadTodayTransformer.swift */; }; 85CF941D2EEBFEA6006467E3 /* NRCoinsPackModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85CF941C2EEBFEA6006467E3 /* NRCoinsPackModel.swift */; }; 85CF941F2EEBFECF006467E3 /* NRCoinsPackReceiveModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85CF941E2EEBFECF006467E3 /* NRCoinsPackReceiveModel.swift */; }; 85CF94212EEC050D006467E3 /* NRCoinsPackBuyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85CF94202EEC050D006467E3 /* NRCoinsPackBuyView.swift */; }; @@ -588,6 +589,7 @@ 85859E552EF3FC5F0020D282 /* NotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 85859E622EF3FC6E0020D282 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 85859E632EF3FC6E0020D282 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; + 85859E672EFCD1D80020D282 /* NRHomeMustReadTodayTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRHomeMustReadTodayTransformer.swift; sourceTree = ""; }; 85CF941C2EEBFEA6006467E3 /* NRCoinsPackModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRCoinsPackModel.swift; sourceTree = ""; }; 85CF941E2EEBFECF006467E3 /* NRCoinsPackReceiveModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRCoinsPackReceiveModel.swift; sourceTree = ""; }; 85CF94202EEC050D006467E3 /* NRCoinsPackBuyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRCoinsPackBuyView.swift; sourceTree = ""; }; @@ -1359,6 +1361,7 @@ 0398109E2ED069890006E317 /* M */ = { isa = PBXGroup; children = ( + 85859E672EFCD1D80020D282 /* NRHomeMustReadTodayTransformer.swift */, 039810BB2ED43C8E0006E317 /* NRReadWhatViewTransformer.swift */, F34990B82EDEB1620039E939 /* NRHomeNovelModuleItem.swift */, ); @@ -2529,6 +2532,7 @@ 85CF94472EF001AD006467E3 /* NRMyUnlocksViewController.swift in Sources */, F3B8596B2EE91C9F0095A9CC /* NRStoreCoinsCell.swift in Sources */, F3B859712EE94A1B0095A9CC /* NRFeedbackViewController.swift in Sources */, + 85859E682EFCD1D80020D282 /* NRHomeMustReadTodayTransformer.swift in Sources */, 85CF94392EEFE35A006467E3 /* NRLoginManager+Facebook.swift in Sources */, F34348C72ED6CCBC00AA7E70 /* NRExploreNovelContentListViewController.swift in Sources */, 039810B82ED431780006E317 /* NRHomeNovelReadWhatView.swift in Sources */, diff --git a/ReaderHive/Class/Explore/VC/NRExploreNovelContentListViewController.swift b/ReaderHive/Class/Explore/VC/NRExploreNovelContentListViewController.swift index a9254c3..3c323de 100644 --- a/ReaderHive/Class/Explore/VC/NRExploreNovelContentListViewController.swift +++ b/ReaderHive/Class/Explore/VC/NRExploreNovelContentListViewController.swift @@ -5,116 +5,137 @@ // Created by 澜声世纪 on 2025/11/26. // -import UIKit import SnapKit +import UIKit class NRExploreNovelContentListViewController: NRViewController { - + var menuItem: NRExploreNovelMenuItem? - + var contentType: NRExploreNovelContentViewController.ContentType = .today - + lazy var dataArr: [NRNovelModel] = [] - + lazy var collectionViewLayout: UICollectionViewCompositionalLayout = { - let item = NSCollectionLayoutItem(layoutSize: .init(widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1))) - - let group = NSCollectionLayoutGroup.horizontal(layoutSize: .init(widthDimension: .fractionalWidth(1), heightDimension: .absolute(60)), subitems: [item]) - + let item = NSCollectionLayoutItem( + layoutSize: .init( + widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1))) + + let group = NSCollectionLayoutGroup.horizontal( + layoutSize: .init(widthDimension: .fractionalWidth(1), heightDimension: .absolute(60)), + subitems: [item]) + let section = NSCollectionLayoutSection(group: group) section.interGroupSpacing = 8 section.contentInsets = .init(top: 0, leading: 0, bottom: 0, trailing: 0) - + let configuration = UICollectionViewCompositionalLayoutConfiguration() - - let layout = UICollectionViewCompositionalLayout(section: section, configuration: configuration) - + + let layout = UICollectionViewCompositionalLayout( + section: section, configuration: configuration) + return layout }() - + lazy var collectionView: NRCollectionView = { - let collectionView = NRCollectionView(frame: .zero, collectionViewLayout: collectionViewLayout) + let collectionView = NRCollectionView( + frame: .zero, collectionViewLayout: collectionViewLayout) collectionView.delegate = self collectionView.dataSource = self collectionView.contentInset = .init(top: 0, left: 0, bottom: 10, right: 0) - collectionView.register(NRExploreNovelContentListCell.self, forCellWithReuseIdentifier: "cell") + collectionView.register( + NRExploreNovelContentListCell.self, forCellWithReuseIdentifier: "cell") return collectionView }() - + @MainActor deinit { NotificationCenter.default.removeObserver(self) } - + override func viewDidLoad() { super.viewDidLoad() self.backgroundImageView.isHidden = true self.view.backgroundColor = .clear - - NotificationCenter.default.addObserver(self, selector: #selector(networkStatusDidChangeNotification), name: NRNetworkReachableManager.networkStatusDidChangeNotification, object: nil) - + + NotificationCenter.default.addObserver( + self, selector: #selector(networkStatusDidChangeNotification), + name: NRNetworkReachableManager.networkStatusDidChangeNotification, object: nil) + nr_setupUI() - + Task { await requestDataArr() } } - - + @objc private func networkStatusDidChangeNotification() { - guard NRNetworkReachableManager.manager.isReachable == true, self.dataArr.isEmpty else { return } + guard NRNetworkReachableManager.manager.isReachable == true, self.dataArr.isEmpty else { + return + } Task { await requestDataArr() } } - + } extension NRExploreNovelContentListViewController { - + private func nr_setupUI() { view.addSubview(collectionView) - + collectionView.snp.makeConstraints { make in make.left.right.bottom.equalToSuperview() make.top.equalToSuperview().offset(12) } } - + } - + //MARK: UICollectionViewDelegate UICollectionViewDataSource -extension NRExploreNovelContentListViewController: UICollectionViewDelegate, UICollectionViewDataSource { - - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! NRExploreNovelContentListCell +extension NRExploreNovelContentListViewController: UICollectionViewDelegate, + UICollectionViewDataSource +{ + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) + -> UICollectionViewCell + { + let cell = + collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) + as! NRExploreNovelContentListCell cell.menuItem = self.menuItem cell.row = indexPath.row cell.model = dataArr[indexPath.row] return cell } - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) + -> Int + { return dataArr.count } - + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let model = dataArr[indexPath.row] let vc = NRNovelDetailViewController() vc.novelId = model.id ?? "" self.navigationController?.pushViewController(vc, animated: true) } - + } extension NRExploreNovelContentListViewController { - + private func requestDataArr() async { guard let type = self.menuItem?.type else { return } - guard let list = await NRHomeAPI.requestRankingCollection(type: type.rawValue, days: self.contentType.rawValue) else { return } - + guard + let list = await NRHomeAPI.requestRankingCollection( + type: type.rawValue, days: self.contentType.rawValue) + else { return } + self.dataArr = list - + self.collectionView.reloadData() } - + } diff --git a/ReaderHive/Class/Home/M/NRHomeMustReadTodayTransformer.swift b/ReaderHive/Class/Home/M/NRHomeMustReadTodayTransformer.swift new file mode 100644 index 0000000..fb09bef --- /dev/null +++ b/ReaderHive/Class/Home/M/NRHomeMustReadTodayTransformer.swift @@ -0,0 +1,47 @@ +// +// NRHomeMustReadTodayTransformer.swift +// ReaderHive +// +// Created by 澜声世纪 on 2025/11/24. +// + +import FSPagerView +import UIKit + +class NRHomeMustReadTodayTransformer: FSPagerViewTransformer { + + nonisolated override init(type: FSPagerViewTransformerType) { + super.init(type: type) + } + + nonisolated override func applyTransform(to attributes: FSPagerViewLayoutAttributes) { + MainActor.assumeIsolated { + guard let pagerView = self.pagerView else { return } + + let itemWidth = pagerView.itemSize.width + let pagerWidth = pagerView.frame.width + + // 目标左边距为 16 + let leftMargin: CGFloat = 16 + + // FSPagerView 默认将 item 居中显示 + // 当前 item 的中心点在 pagerView.width / 2 + // 我们希望 item 的左侧距离边框为 16,即中心点应该在 (16 + itemWidth / 2) + let targetCenter = leftMargin + itemWidth / 2 + let currentCenter = pagerWidth / 2 + let offset = currentCenter - targetCenter + + // 将所有 item 向左平移 offset 距离,实现靠左停留的效果 + attributes.transform = CGAffineTransform(translationX: -offset, y: 0) + } + } + + nonisolated override func proposedInteritemSpacing() -> CGFloat { + guard let pagerView = self.pagerView else { + return 0 + } + return MainActor.assumeIsolated { + return pagerView.interitemSpacing + } + } +} diff --git a/ReaderHive/Class/Home/V/NRHomeNovelMustReadTodayCell.swift b/ReaderHive/Class/Home/V/NRHomeNovelMustReadTodayCell.swift index 444b187..0f2fad3 100644 --- a/ReaderHive/Class/Home/V/NRHomeNovelMustReadTodayCell.swift +++ b/ReaderHive/Class/Home/V/NRHomeNovelMustReadTodayCell.swift @@ -5,20 +5,21 @@ // Created by 澜声世纪 on 2025/11/24. // -import UIKit +import FSPagerView import SnapKit +import UIKit + +class NRHomeNovelMustReadTodayCell: FSPagerViewCell { -class NRHomeNovelMustReadTodayCell: UICollectionViewCell { - var model: NRNovelModel? { didSet { coverImageView.nr_setImage(model?.image_url) titleLabel.text = model?.name desLabel.text = model?.nr_description - + starView.grade = (model?.rate ?? 0) / 2 starView.text = NSNumber(value: model?.rate ?? 0).toString(maximumFractionDigits: 1, minimumFractionDigits: 1) - + if let text = model?.category?.first, text.count > 0 { categoryView.isHidden = false categoryLabel.text = text @@ -27,19 +28,19 @@ class NRHomeNovelMustReadTodayCell: UICollectionViewCell { } } } - + lazy var bgView: UIImageView = { let view = UIImageView(image: UIImage(named: "home_cell_bg_image_01")) return view }() - + lazy var coverImageView: NRImageView = { let imageView = NRImageView() imageView.layer.cornerRadius = 4 imageView.layer.masksToBounds = true return imageView }() - + lazy var categoryView: UIView = { let view = UIView() view.backgroundColor = .black.withAlphaComponent(0.05) @@ -47,21 +48,21 @@ class NRHomeNovelMustReadTodayCell: UICollectionViewCell { view.layer.masksToBounds = true return view }() - + lazy var categoryLabel: UILabel = { let label = UILabel() label.font = .font(ofSize: 10, weight: .regular) label.textColor = .black.withAlphaComponent(0.5) return label }() - + lazy var titleLabel: UILabel = { let label = UILabel() label.font = .font(ofSize: 14, weight: .medium) label.textColor = .black return label }() - + lazy var desLabel: UILabel = { let label = UILabel() label.font = .font(ofSize: 10, weight: .regular) @@ -69,17 +70,19 @@ class NRHomeNovelMustReadTodayCell: UICollectionViewCell { label.numberOfLines = 2 return label }() - + lazy var readNowBgView: UIView = { let view = NRGradientView() - view.colors = [UIColor.F_3912_F.cgColor, UIColor.FF_4_A_4_A.cgColor, UIColor.FA_9_B_1_F.cgColor] + view.colors = [ + UIColor.F_3912_F.cgColor, UIColor.FF_4_A_4_A.cgColor, UIColor.FA_9_B_1_F.cgColor, + ] view.startPoint = .init(x: 0, y: 0.5) view.endPoint = .init(x: 1, y: 0.5) view.layer.cornerRadius = 8 view.layer.masksToBounds = true return view }() - + lazy var readNowLabel: UILabel = { let label = UILabel() label.font = .font(ofSize: 14, weight: .medium) @@ -87,17 +90,17 @@ class NRHomeNovelMustReadTodayCell: UICollectionViewCell { label.text = "Read Now".localized return label }() - + lazy var starView: NRStarGradeView = { let view = NRStarGradeView() return view }() - + override init(frame: CGRect) { super.init(frame: frame) self.contentView.layer.cornerRadius = 12 self.contentView.layer.masksToBounds = true - + categoryLabel.text = "Satisfying" titleLabel.text = "A Strike to the Heart" desLabel.text = "Haunted by fading memories, a man navigates a labyrinth of dreams and reality, uncovering truths that blur the line between past and present." @@ -109,11 +112,11 @@ class NRHomeNovelMustReadTodayCell: UICollectionViewCell { required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - + } extension NRHomeNovelMustReadTodayCell { - + private func nr_setupUI() { contentView.addSubview(bgView) contentView.addSubview(coverImageView) @@ -124,57 +127,57 @@ extension NRHomeNovelMustReadTodayCell { contentView.addSubview(desLabel) contentView.addSubview(readNowBgView) readNowBgView.addSubview(readNowLabel) - + bgView.snp.makeConstraints { make in make.edges.equalToSuperview() } - + coverImageView.snp.makeConstraints { make in make.left.equalToSuperview().offset(12) make.centerY.equalToSuperview() make.width.equalTo(100) make.height.equalTo(150) } - + categoryView.snp.makeConstraints { make in make.left.equalTo(coverImageView.snp.right).offset(12) make.right.lessThanOrEqualToSuperview().offset(-12) make.top.equalTo(coverImageView) make.height.equalTo(20) } - + categoryLabel.snp.makeConstraints { make in make.center.equalToSuperview() make.left.equalToSuperview().offset(8) } - + titleLabel.snp.makeConstraints { make in make.left.equalTo(categoryView) make.top.equalTo(coverImageView).offset(24) make.right.lessThanOrEqualToSuperview().offset(-12) } - + starView.snp.makeConstraints { make in make.left.equalTo(titleLabel) make.top.equalTo(titleLabel.snp.bottom).offset(6) } - + desLabel.snp.makeConstraints { make in make.left.equalTo(titleLabel) make.top.equalTo(titleLabel.snp.bottom).offset(33) make.right.lessThanOrEqualToSuperview().offset(-12) } - + readNowBgView.snp.makeConstraints { make in make.left.equalTo(titleLabel) make.bottom.equalTo(coverImageView) make.right.equalToSuperview().offset(-12) make.height.equalTo(36) } - + readNowLabel.snp.makeConstraints { make in make.center.equalToSuperview() } } - + } diff --git a/ReaderHive/Class/Home/V/NRHomeNovelMustReadTodayView.swift b/ReaderHive/Class/Home/V/NRHomeNovelMustReadTodayView.swift index dcc0ea2..493d2fb 100644 --- a/ReaderHive/Class/Home/V/NRHomeNovelMustReadTodayView.swift +++ b/ReaderHive/Class/Home/V/NRHomeNovelMustReadTodayView.swift @@ -5,82 +5,88 @@ // Created by 澜声世纪 on 2025/11/24. // -import UIKit +import FSPagerView import SnapKit +import UIKit import YYCategories class NRHomeNovelMustReadTodayView: NRHomeNovelHeaderContentView { - - + var dataArr: [NRNovelModel] = [] { didSet { - self.collectionView.reloadData() + self.pagerView.reloadData() } } - - - lazy var collectionViewLayout: UICollectionViewFlowLayout = { - let layout = UICollectionViewFlowLayout() - layout.scrollDirection = .horizontal - layout.itemSize = .init(width: 316, height: 174) - layout.minimumLineSpacing = 16 - return layout + + lazy var pagerView: FSPagerView = { + let pagerView = FSPagerView() + pagerView.delegate = self + pagerView.dataSource = self + // 设置无限滚动 + pagerView.isInfinite = true + // 设置自动滚动间隔 + pagerView.automaticSlidingInterval = 5.0 + // 设置 item 之间的间距 + pagerView.interitemSpacing = 16 + // 设置 item 大小 + pagerView.itemSize = CGSize(width: 316, height: 174) + // 设置靠左停靠的 Transformer + pagerView.transformer = NRHomeMustReadTodayTransformer(type: .linear) + // 注册 Cell + pagerView.register(NRHomeNovelMustReadTodayCell.self, forCellWithReuseIdentifier: "cell") + return pagerView }() - - lazy var collectionView: NRCollectionView = { - let collectionView = NRCollectionView(frame: .zero, collectionViewLayout: collectionViewLayout) - collectionView.delegate = self - collectionView.dataSource = self - collectionView.showsHorizontalScrollIndicator = false - collectionView.contentInset = .init(top: 0, left: 16, bottom: 0, right: 16) - collectionView.register(NRHomeNovelMustReadTodayCell.self, forCellWithReuseIdentifier: "cell") - return collectionView - }() - + override init(frame: CGRect) { super.init(frame: frame) self.titleLabel.text = "Must-Read Today".localized - + nr_setupUI() } - + @MainActor required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - + } extension NRHomeNovelMustReadTodayView { - + private func nr_setupUI() { - contentView.addSubview(collectionView) - - collectionView.snp.makeConstraints { make in + contentView.addSubview(pagerView) + + pagerView.snp.makeConstraints { make in make.left.right.top.equalToSuperview() make.bottom.equalToSuperview() - make.height.equalTo(self.collectionViewLayout.itemSize.height) + make.height.equalTo(174) } } - + } -//MARK: UICollectionViewDelegate UICollectionViewDataSource -extension NRHomeNovelMustReadTodayView: UICollectionViewDelegate, UICollectionViewDataSource { - - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! NRHomeNovelMustReadTodayCell - cell.model = self.dataArr[indexPath.row] - return cell - } - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { +// MARK: - FSPagerViewDataSource, FSPagerViewDelegate +extension NRHomeNovelMustReadTodayView: FSPagerViewDataSource, FSPagerViewDelegate { + + func numberOfItems(in pagerView: FSPagerView) -> Int { return self.dataArr.count } - - func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + + func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell { + let cell = + pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index) + as! NRHomeNovelMustReadTodayCell + cell.model = self.dataArr[index] + return cell + } + + func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) { + pagerView.deselectItem(at: index, animated: true) + let vc = NRNovelDetailViewController() - vc.novelId = dataArr[indexPath.row].id ?? "" + vc.novelId = dataArr[index].id ?? "" self.viewController?.navigationController?.pushViewController(vc, animated: true) } - + + // 如果需要像之前的 UICollectionViewContentInset 一样在两边留白,FSPagerView 的处理方式通常是调整 itemSize 和 transformer + // 或者直接在布局层面控制。在这里我们通过 transform 效果或者间距来实现类似感观。 } diff --git a/ReaderHive/Class/Novel/M/NRReadChapterCatalogModel.swift b/ReaderHive/Class/Novel/M/NRReadChapterCatalogModel.swift index a8aa433..e6fe1f2 100644 --- a/ReaderHive/Class/Novel/M/NRReadChapterCatalogModel.swift +++ b/ReaderHive/Class/Novel/M/NRReadChapterCatalogModel.swift @@ -33,7 +33,7 @@ class NRReadChapterCatalogModel: NSObject, SmartCodable { func parserEmpty() { let chapterModel = NRReadChapterModel() if self.is_lock == true { - chapterModel.parserEmpty("Not unlocked yet".localized) + chapterModel.parserEmpty("Chapter Locked".localized) } else { chapterModel.parserEmpty("Loading".localized) } diff --git a/ReaderHive/Class/Novel/M/NRReadChapterModel.swift b/ReaderHive/Class/Novel/M/NRReadChapterModel.swift index 6fbd422..df3c4ca 100644 --- a/ReaderHive/Class/Novel/M/NRReadChapterModel.swift +++ b/ReaderHive/Class/Novel/M/NRReadChapterModel.swift @@ -73,7 +73,7 @@ class NRReadChapterModel: NSObject, SmartCodable { ///解析一个空白页面 func parserEmpty(_ text: String) { - fullContent = NSMutableAttributedString(string: "\n\n\n\n\n" + text, attributes: NRNovelReadSetManager.manager.attributes(isTitle: true)) + fullContent = NSMutableAttributedString(string: "\n\n\n\n\n" + text, attributes: NRNovelReadSetManager.manager.attributes(isTitle: false)) let pageModel = NRReadPageModel() pageModel.content = fullContent diff --git a/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift b/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift index a908a43..dd79f40 100644 --- a/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift +++ b/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift @@ -201,10 +201,10 @@ extension NRNovelReadViewModel { self.vc?.loadData() } - view.didDismissHandle = { [weak self] in - guard let self = self else { return } - self.showVipRetainAlert(catalogModel) - } +// view.didDismissHandle = { [weak self] in +// guard let self = self else { return } +// self.showVipRetainAlert(catalogModel) +// } view.present(in: nil) self.popView = view diff --git a/ReaderHive/Source/en.lproj/Localizable.strings b/ReaderHive/Source/en.lproj/Localizable.strings index 3e027a8..c0a3ca3 100644 --- a/ReaderHive/Source/en.lproj/Localizable.strings +++ b/ReaderHive/Source/en.lproj/Localizable.strings @@ -76,7 +76,7 @@ "alert_title_01" = "Recommend this book?"; "alert_detail_01" = "Help us share this story with others."; "Yes, Recommend" = "Yes, Recommend"; -"Not unlocked yet" = "Not unlocked yet"; +"Chapter Locked" = "Chapter Locked"; "No data" = "No data"; "Coins" = "Coins"; "Bonus" = "Bonus";