193 lines
5.5 KiB
Swift
193 lines
5.5 KiB
Swift
//
|
||
// NavigationView.swift
|
||
// Crush
|
||
//
|
||
// Created by Leon on 2025/7/12.
|
||
//
|
||
|
||
import Foundation
|
||
import UIKit
|
||
//import R
|
||
|
||
@objcMembers class NavigationView: UIView {
|
||
|
||
var alpha0Title:String?{
|
||
didSet{
|
||
titleLabel.alpha = 0
|
||
titleLabel.text = alpha0Title
|
||
}
|
||
}
|
||
|
||
var title:String?{
|
||
didSet{
|
||
titleLabel.text = title
|
||
}
|
||
}
|
||
|
||
/// \> 0
|
||
var paddingRightForRightStack:CGFloat = 2{
|
||
didSet{
|
||
rightStackH.snp.updateConstraints { make in
|
||
make.trailing.equalToSuperview().offset(-paddingRightForRightStack)
|
||
}
|
||
}
|
||
}
|
||
|
||
var tapBackButtonAction : (() -> Void)?
|
||
var bgView:UIView!
|
||
|
||
@objc lazy var leftStackH : UIStackView = {
|
||
let v = UIStackView()
|
||
v.spacing = 0
|
||
v.alignment = .center
|
||
addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.leading.equalToSuperview().offset(8) // 8+insets.left(16) = 24
|
||
make.bottom.equalToSuperview()
|
||
make.height.equalTo(44)
|
||
}
|
||
return v
|
||
}()
|
||
|
||
@objc lazy var backButton: UIButton = {
|
||
let backButton = UIButton(type: .custom)
|
||
leftStackH.addArrangedSubview(backButton)
|
||
backButton.setImage(R.image.nav_back_white()!, for: .normal)
|
||
backButton.contentHorizontalAlignment = .left
|
||
backButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: -16)
|
||
backButton.addTarget(self, action: #selector(popAction), for: .touchUpInside)
|
||
backButton.snp.makeConstraints { make in
|
||
make.width.equalTo(44)
|
||
make.height.equalTo(44)
|
||
}
|
||
return backButton
|
||
}()
|
||
|
||
@objc lazy var titleLabel: UILabel = {
|
||
let titleLabel = UILabel()
|
||
titleLabel.textColor = .c.ctpn
|
||
titleLabel.preferredMaxLayoutWidth = 120
|
||
titleLabel.textAlignment = .center
|
||
titleLabel.font = .t.ttm//.fredokaOne(size: 18)
|
||
addSubview(titleLabel)
|
||
|
||
titleLabel.snp.makeConstraints { make in
|
||
make.centerY.equalTo(backButton)
|
||
make.centerX.equalToSuperview()
|
||
make.leading.greaterThanOrEqualTo(leftStackH.snp.trailing)
|
||
make.trailing.lessThanOrEqualTo(rightStackH.snp.leading)
|
||
}
|
||
return titleLabel
|
||
}()
|
||
|
||
/// btn 44x44 is ok
|
||
@objc lazy var rightStackH: UIStackView = {
|
||
let rightStackH = UIStackView()
|
||
rightStackH.axis = .horizontal
|
||
rightStackH.spacing = 0
|
||
rightStackH.alignment = .center
|
||
addSubview(rightStackH)
|
||
rightStackH.snp.makeConstraints { make in
|
||
make.trailing.equalToSuperview().offset(-paddingRightForRightStack)
|
||
make.centerY.equalTo(backButton)
|
||
}
|
||
return rightStackH
|
||
}()
|
||
|
||
@objc lazy var rightButton: UIButton = {
|
||
let rightButton = UIButton(type: .custom)
|
||
rightButton.isHidden = true
|
||
rightButton.setTitleColor(.black, for: .normal)
|
||
rightButton.titleLabel?.font = .t.tbm//.popSemiBold(size: 16)
|
||
rightButton.contentHorizontalAlignment = .right
|
||
rightStackH.addArrangedSubview(rightButton)
|
||
rightButton.snp.makeConstraints { make in
|
||
make.height.equalTo(44)
|
||
make.width.equalTo(44)
|
||
}
|
||
return rightButton
|
||
}()
|
||
|
||
@objc lazy var styleMainButton: StyleButton = {
|
||
let styleMainButton = StyleButton()
|
||
styleMainButton.primary(size: .small)
|
||
rightStackH.addArrangedSubview(styleMainButton)
|
||
paddingRightForRightStack = 24
|
||
return styleMainButton
|
||
}()
|
||
|
||
override init(frame: CGRect) {
|
||
super.init(frame: frame)
|
||
|
||
bgView = {
|
||
let v = UIView()
|
||
addSubview(v)
|
||
v.backgroundColor = .c.cbd
|
||
v.snp.makeConstraints { make in
|
||
make.edges.equalToSuperview()
|
||
}
|
||
return v
|
||
}()
|
||
|
||
//backgroundColor = .c.cbd
|
||
backgroundColor = .clear
|
||
}
|
||
|
||
@available(*, unavailable)
|
||
required init?(coder _: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
@objc func popAction() {
|
||
if let block = tapBackButtonAction{
|
||
block()
|
||
}else{
|
||
if let vc = viewController() as? CLBaseViewController {
|
||
vc.close()
|
||
}else{
|
||
viewController()?.navigationController?.popViewController(animated: true)
|
||
}
|
||
}
|
||
}
|
||
|
||
@objc open func setupBackButtonCloseIcon(black: Bool = false) {
|
||
if black {
|
||
backButton.setImage(R.image.icon_close_20_black(), for: .normal)
|
||
} else {
|
||
backButton.setImage(R.image.icon_close_20(), for: .normal)
|
||
|
||
}
|
||
backButton.isHidden = false
|
||
}
|
||
}
|
||
|
||
// MARK: - Public
|
||
// 支持渐变 NavigationView
|
||
extension NavigationView {
|
||
|
||
//⚠️ Please use NaviAlphaHandle to adjust alpha
|
||
func changeAlpha(alpha: CGFloat) {
|
||
titleLabel.isHidden = false
|
||
|
||
if titleLabel.alpha == alpha {
|
||
return
|
||
}
|
||
|
||
backgroundColor = UIColor.white.withAlphaComponent(alpha)
|
||
titleLabel.alpha = alpha
|
||
backButton.alpha = alpha
|
||
}
|
||
|
||
func setupNaviRightStyleButton(){
|
||
styleMainButton.isHidden = false
|
||
paddingRightForRightStack = 24
|
||
}
|
||
|
||
func setupBgViewToStatusBarHeight(){
|
||
self.bgView.snp.remakeConstraints { make in
|
||
make.top.leading.trailing.equalToSuperview()
|
||
make.height.equalTo(UIWindow.statusBarHeight)
|
||
}
|
||
}
|
||
}
|