Use system navigation bar on OTG page
This commit is contained in:
@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user