Use system navigation bar on OTG page

This commit is contained in:
2026-07-10 11:20:14 +08:00
parent 98dc810455
commit b6d3207665

View File

@ -30,8 +30,6 @@ private struct WiredTransferListSection: Hashable {
final class WiredCameraTransferViewController: BaseViewController { final class WiredCameraTransferViewController: BaseViewController {
private let viewModel: WiredCameraTransferViewModel private let viewModel: WiredCameraTransferViewModel
private let headerView = UIView()
private let backButton = UIButton(type: .system)
private let titleLabel = UILabel() private let titleLabel = UILabel()
private let phoneLabel = UILabel() private let phoneLabel = UILabel()
private let statusCard = UIView() private let statusCard = UIView()
@ -73,6 +71,7 @@ final class WiredCameraTransferViewController: BaseViewController {
private let albumImportButton = UIButton(type: .system) private let albumImportButton = UIButton(type: .system)
private let specifyButton = UIButton(type: .system) private let specifyButton = UIButton(type: .system)
private var isHistoryImportButtonVisible = false private var isHistoryImportButtonVisible = false
private var previousNavigationBarStyle: (tintColor: UIColor?, barStyle: UIBarStyle, isTranslucent: Bool)?
init(viewModel: WiredCameraTransferViewModel) { init(viewModel: WiredCameraTransferViewModel) {
self.viewModel = viewModel self.viewModel = viewModel
@ -85,7 +84,14 @@ final class WiredCameraTransferViewController: BaseViewController {
} }
override func setupNavigationBar() { 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() { override func viewDidLoad() {
@ -95,27 +101,27 @@ final class WiredCameraTransferViewController: BaseViewController {
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
applyNavigationBarStyle()
viewModel.start() viewModel.start()
navigationController?.setNavigationBarHidden(true, animated: animated) navigationController?.setNavigationBarHidden(false, animated: animated)
} }
override func viewWillDisappear(_ animated: Bool) { override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated) super.viewWillDisappear(animated)
viewModel.stop() viewModel.stop()
navigationController?.setNavigationBarHidden(false, animated: animated) restoreNavigationBarStyle()
} }
override func setupUI() { override func setupUI() {
view.backgroundColor = AppColor.pageBackground view.backgroundColor = AppColor.pageBackground
headerView.backgroundColor = AppColor.primary
backButton.setImage(UIImage(systemName: "chevron.left"), for: .normal)
backButton.tintColor = .white
titleLabel.text = viewModel.albumTitle titleLabel.text = viewModel.albumTitle
titleLabel.font = .systemFont(ofSize: 20, weight: .bold) titleLabel.font = .systemFont(ofSize: 17, weight: .semibold)
titleLabel.textColor = .white titleLabel.textColor = .white
titleLabel.textAlignment = .center
phoneLabel.text = viewModel.headerPhone phoneLabel.text = viewModel.headerPhone
phoneLabel.font = .systemFont(ofSize: 13) phoneLabel.font = .systemFont(ofSize: 11)
phoneLabel.textColor = UIColor.white.withAlphaComponent(0.92) phoneLabel.textColor = UIColor.white.withAlphaComponent(0.92)
phoneLabel.textAlignment = .center
statusCard.backgroundColor = .white statusCard.backgroundColor = .white
statusCard.layer.cornerRadius = 12 statusCard.layer.cornerRadius = 12
@ -235,10 +241,6 @@ final class WiredCameraTransferViewController: BaseViewController {
historyImportButton.isHidden = true historyImportButton.isHidden = true
historyImportButton.alpha = 0 historyImportButton.alpha = 0
view.addSubview(headerView)
headerView.addSubview(backButton)
headerView.addSubview(titleLabel)
headerView.addSubview(phoneLabel)
view.addSubview(statusCard) view.addSubview(statusCard)
statusCard.addSubview(storagePanel) statusCard.addSubview(storagePanel)
storagePanel.addSubview(storageTitleLabel) storagePanel.addSubview(storageTitleLabel)
@ -273,26 +275,8 @@ final class WiredCameraTransferViewController: BaseViewController {
} }
override func setupConstraints() { 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 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) make.leading.trailing.equalToSuperview().inset(16)
} }
storagePanel.snp.makeConstraints { make in storagePanel.snp.makeConstraints { make in
@ -416,7 +400,6 @@ final class WiredCameraTransferViewController: BaseViewController {
viewModel.onShowMessage = { [weak self] message in viewModel.onShowMessage = { [weak self] message in
Task { @MainActor in self?.showToast(message) } Task { @MainActor in self?.showToast(message) }
} }
backButton.addTarget(self, action: #selector(backTapped), for: .touchUpInside)
refreshButton.addTarget(self, action: #selector(refreshTapped), for: .touchUpInside) refreshButton.addTarget(self, action: #selector(refreshTapped), for: .touchUpInside)
batchButton.addTarget(self, action: #selector(batchTapped), for: .touchUpInside) batchButton.addTarget(self, action: #selector(batchTapped), for: .touchUpInside)
historyImportButton.addTarget(self, action: #selector(historyImportTapped), for: .touchUpInside) historyImportButton.addTarget(self, action: #selector(historyImportTapped), for: .touchUpInside)
@ -559,6 +542,41 @@ final class WiredCameraTransferViewController: BaseViewController {
pendingScrollSlotId = nil 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) { private func configurePhotoCell(_ cell: WiredTransferPhotoCell, item: TravelAlbumOTGPhotoItem) {
let selected = viewModel.selectedPhotoIds.contains(item.id) let selected = viewModel.selectedPhotoIds.contains(item.id)
cell.apply(item: item, selectionMode: viewModel.selectUploadMode, selected: selected) cell.apply(item: item, selectionMode: viewModel.selectUploadMode, selected: selected)
@ -714,10 +732,6 @@ final class WiredCameraTransferViewController: BaseViewController {
return text return text
} }
@objc private func backTapped() {
navigationController?.popViewController(animated: true)
}
@objc private func refreshTapped() { @objc private func refreshTapped() {
viewModel.refreshCameraFiles() viewModel.refreshCameraFiles()
} }