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