-
Notifications
You must be signed in to change notification settings - Fork 13
/
View07_UpdateNavigationBar.swift
75 lines (63 loc) · 2.58 KB
/
View07_UpdateNavigationBar.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//
// View07_UpdateNavigationBar.swift
// NXNavigationExtensionSwiftUIDemo
//
// Created by lidan on 2021/10/18.
//
import SwiftUI
import NXNavigationExtension
import NXNavigationExtensionSwiftUI
@available(iOS 14.0, *)
struct View07_UpdateNavigationBar: View {
@State private var context: NXNavigationRouter.Context
@State private var title = "Custom"
@State private var count = 0
@State private var darkColor = UIColor.randomDark
@State private var lightColor = UIColor.randomLight
@State private var isLightTheme = true
private static let buttonWidthAndHeight = 160.0
private let item: NavigationFeatureItem
private var randomColor: UIColor {
if isLightTheme {
return lightColor
} else {
return darkColor
}
}
init(_ item: NavigationFeatureItem) {
self.item = item
self.context = NXNavigationRouter.Context(routeName: "/UpdateNavigationBar")
}
var body: some View {
Button {
count += 1
title = "😜(\(count))"
isLightTheme.toggle()
if isLightTheme {
lightColor = UIColor.randomLight
} else {
darkColor = UIColor.randomDark
}
NXNavigationRouter.of(context).setNeedsNavigationBarAppearanceUpdate()
} label: {
Text("Update")
.foregroundColor(Color(randomColor))
.frame(width: View07_UpdateNavigationBar.buttonWidthAndHeight, height: View07_UpdateNavigationBar.buttonWidthAndHeight)
}
.overlay(RoundedRectangle(cornerRadius: View07_UpdateNavigationBar.buttonWidthAndHeight * 0.5, style: .circular).strokeBorder(Color(randomColor), lineWidth: 5))
.navigationBarTitle(LocalizedStringKey(item.title))
.useNXNavigationView(context: $context, onPrepareConfiguration: { configuration in
configuration.navigationBarAppearance.useSystemBackButton = true
configuration.navigationBarAppearance.tintColor = isLightTheme ? .black : .white
configuration.navigationBarAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: isLightTheme ? UIColor.black : UIColor.white]
configuration.navigationBarAppearance.systemBackButtonTitle = title
configuration.navigationBarAppearance.backgroundColor = randomColor
})
}
}
@available(iOS 14.0, *)
#Preview {
AdaptiveNavigationView {
View07_UpdateNavigationBar(NavigationFeatureItem(style: .updateNavigationBar))
}
}