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 {
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()
}