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