diff --git a/suixinkan/UI/TravelAlbum/WiredCameraTransferViewController.swift b/suixinkan/UI/TravelAlbum/WiredCameraTransferViewController.swift index a472f87..c957a17 100644 --- a/suixinkan/UI/TravelAlbum/WiredCameraTransferViewController.swift +++ b/suixinkan/UI/TravelAlbum/WiredCameraTransferViewController.swift @@ -30,8 +30,6 @@ private struct WiredTransferListSection: Hashable { final class WiredCameraTransferViewController: BaseViewController { private let viewModel: WiredCameraTransferViewModel - private let headerView = UIView() - private let backButton = UIButton(type: .system) private let titleLabel = UILabel() private let phoneLabel = UILabel() private let statusCard = UIView() @@ -73,6 +71,7 @@ final class WiredCameraTransferViewController: BaseViewController { private let albumImportButton = UIButton(type: .system) private let specifyButton = UIButton(type: .system) private var isHistoryImportButtonVisible = false + private var previousNavigationBarStyle: (tintColor: UIColor?, barStyle: UIBarStyle, isTranslucent: Bool)? init(viewModel: WiredCameraTransferViewModel) { self.viewModel = viewModel @@ -85,7 +84,14 @@ final class WiredCameraTransferViewController: BaseViewController { } override func setupNavigationBar() { - navigationController?.setNavigationBarHidden(true, animated: false) + navigationItem.largeTitleDisplayMode = .never + configureBlueNavigationBarAppearance() + + let titleStack = UIStackView(arrangedSubviews: [titleLabel, phoneLabel]) + titleStack.axis = .vertical + titleStack.alignment = .center + titleStack.spacing = 1 + navigationItem.titleView = titleStack } override func viewDidLoad() { @@ -95,27 +101,27 @@ final class WiredCameraTransferViewController: BaseViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) + applyNavigationBarStyle() viewModel.start() - navigationController?.setNavigationBarHidden(true, animated: animated) + navigationController?.setNavigationBarHidden(false, animated: animated) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) viewModel.stop() - navigationController?.setNavigationBarHidden(false, animated: animated) + restoreNavigationBarStyle() } override func setupUI() { view.backgroundColor = AppColor.pageBackground - headerView.backgroundColor = AppColor.primary - backButton.setImage(UIImage(systemName: "chevron.left"), for: .normal) - backButton.tintColor = .white titleLabel.text = viewModel.albumTitle - titleLabel.font = .systemFont(ofSize: 20, weight: .bold) + titleLabel.font = .systemFont(ofSize: 17, weight: .semibold) titleLabel.textColor = .white + titleLabel.textAlignment = .center phoneLabel.text = viewModel.headerPhone - phoneLabel.font = .systemFont(ofSize: 13) + phoneLabel.font = .systemFont(ofSize: 11) phoneLabel.textColor = UIColor.white.withAlphaComponent(0.92) + phoneLabel.textAlignment = .center statusCard.backgroundColor = .white statusCard.layer.cornerRadius = 12 @@ -235,10 +241,6 @@ final class WiredCameraTransferViewController: BaseViewController { historyImportButton.isHidden = true historyImportButton.alpha = 0 - view.addSubview(headerView) - headerView.addSubview(backButton) - headerView.addSubview(titleLabel) - headerView.addSubview(phoneLabel) view.addSubview(statusCard) statusCard.addSubview(storagePanel) storagePanel.addSubview(storageTitleLabel) @@ -273,26 +275,8 @@ final class WiredCameraTransferViewController: BaseViewController { } override func setupConstraints() { - headerView.snp.makeConstraints { make in - make.top.leading.trailing.equalToSuperview() - make.height.equalTo(118) - } - backButton.snp.makeConstraints { make in - make.leading.equalToSuperview().offset(8) - make.bottom.equalToSuperview().offset(-28) - make.size.equalTo(44) - } - titleLabel.snp.makeConstraints { make in - make.leading.equalTo(backButton.snp.trailing).offset(4) - make.trailing.equalToSuperview().offset(-16) - make.top.equalTo(backButton).offset(4) - } - phoneLabel.snp.makeConstraints { make in - make.top.equalTo(titleLabel.snp.bottom).offset(2) - make.leading.trailing.equalTo(titleLabel) - } statusCard.snp.makeConstraints { make in - make.top.equalTo(headerView.snp.bottom).offset(-10) + make.top.equalTo(view.safeAreaLayoutGuide).offset(14) make.leading.trailing.equalToSuperview().inset(16) } storagePanel.snp.makeConstraints { make in @@ -416,7 +400,6 @@ final class WiredCameraTransferViewController: BaseViewController { viewModel.onShowMessage = { [weak self] message in Task { @MainActor in self?.showToast(message) } } - backButton.addTarget(self, action: #selector(backTapped), for: .touchUpInside) refreshButton.addTarget(self, action: #selector(refreshTapped), for: .touchUpInside) batchButton.addTarget(self, action: #selector(batchTapped), for: .touchUpInside) historyImportButton.addTarget(self, action: #selector(historyImportTapped), for: .touchUpInside) @@ -559,6 +542,41 @@ final class WiredCameraTransferViewController: BaseViewController { pendingScrollSlotId = nil } + private func configureBlueNavigationBarAppearance() { + let appearance = UINavigationBarAppearance() + appearance.configureWithOpaqueBackground() + appearance.backgroundColor = AppColor.primary + appearance.shadowColor = .clear + appearance.titleTextAttributes = [ + .foregroundColor: UIColor.white, + .font: UIFont.systemFont(ofSize: 17, weight: .semibold), + ] + + navigationItem.standardAppearance = appearance + navigationItem.scrollEdgeAppearance = appearance + navigationItem.compactAppearance = appearance + } + + private func applyNavigationBarStyle() { + guard let navigationBar = navigationController?.navigationBar else { return } + if previousNavigationBarStyle == nil { + previousNavigationBarStyle = (navigationBar.tintColor, navigationBar.barStyle, navigationBar.isTranslucent) + } + navigationBar.tintColor = .white + navigationBar.barStyle = .black + navigationBar.isTranslucent = false + } + + private func restoreNavigationBarStyle() { + guard let previousNavigationBarStyle, let navigationBar = navigationController?.navigationBar else { + return + } + navigationBar.tintColor = previousNavigationBarStyle.tintColor + navigationBar.barStyle = previousNavigationBarStyle.barStyle + navigationBar.isTranslucent = previousNavigationBarStyle.isTranslucent + self.previousNavigationBarStyle = nil + } + private func configurePhotoCell(_ cell: WiredTransferPhotoCell, item: TravelAlbumOTGPhotoItem) { let selected = viewModel.selectedPhotoIds.contains(item.id) cell.apply(item: item, selectionMode: viewModel.selectUploadMode, selected: selected) @@ -714,10 +732,6 @@ final class WiredCameraTransferViewController: BaseViewController { return text } - @objc private func backTapped() { - navigationController?.popViewController(animated: true) - } - @objc private func refreshTapped() { viewModel.refreshCameraFiles() }