├── custom-navigation-bar
├── src
│ ├── Assets.xcassets
│ │ ├── Contents.json
│ │ ├── sw-rebel-48.imageset
│ │ │ ├── sw-rebel-48@2x.png
│ │ │ └── Contents.json
│ │ ├── sw-empire-48.imageset
│ │ │ ├── sw-empire-48@2x.png
│ │ │ └── Contents.json
│ │ ├── secure-cloud-50.imageset
│ │ │ ├── secure-cloud-50@2x.png
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── ViewController.swift
│ ├── AppDelegate.swift
│ ├── Info.plist
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ └── navigation
│ │ ├── NavigationBar.swift
│ │ └── NavigationBar.xib
└── custom-navigation-bar.xcodeproj
│ ├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── project.pbxproj
├── customizable-navigation-bar
├── src
│ ├── Assets.xcassets
│ │ ├── Contents.json
│ │ ├── sw-rebel-48.imageset
│ │ │ ├── sw-rebel-48@2x.png
│ │ │ └── Contents.json
│ │ ├── sw-empire-48.imageset
│ │ │ ├── sw-empire-48@2x.png
│ │ │ └── Contents.json
│ │ ├── secure-cloud-50.imageset
│ │ │ ├── secure-cloud-50@2x.png
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── ViewController.swift
│ ├── Info.plist
│ └── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
└── customizable-navigation-bar.xcodeproj
│ ├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── project.pbxproj
├── README.md
├── LICENSE
└── .gitignore
/custom-navigation-bar/src/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Custom Navigation Bar
2 |
3 | ## Built with
4 |
5 | - [XCode 10.2](https://developer.apple.com/xcode/)
6 | - [Swift 5](https://developer.apple.com/swift/)
7 |
8 |
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Assets.xcassets/sw-rebel-48.imageset/sw-rebel-48@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/srfunksensei/CustomNavigationBar/HEAD/custom-navigation-bar/src/Assets.xcassets/sw-rebel-48.imageset/sw-rebel-48@2x.png
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Assets.xcassets/sw-empire-48.imageset/sw-empire-48@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/srfunksensei/CustomNavigationBar/HEAD/custom-navigation-bar/src/Assets.xcassets/sw-empire-48.imageset/sw-empire-48@2x.png
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Assets.xcassets/sw-rebel-48.imageset/sw-rebel-48@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/srfunksensei/CustomNavigationBar/HEAD/customizable-navigation-bar/src/Assets.xcassets/sw-rebel-48.imageset/sw-rebel-48@2x.png
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Assets.xcassets/secure-cloud-50.imageset/secure-cloud-50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/srfunksensei/CustomNavigationBar/HEAD/custom-navigation-bar/src/Assets.xcassets/secure-cloud-50.imageset/secure-cloud-50@2x.png
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Assets.xcassets/sw-empire-48.imageset/sw-empire-48@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/srfunksensei/CustomNavigationBar/HEAD/customizable-navigation-bar/src/Assets.xcassets/sw-empire-48.imageset/sw-empire-48@2x.png
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Assets.xcassets/secure-cloud-50.imageset/secure-cloud-50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/srfunksensei/CustomNavigationBar/HEAD/customizable-navigation-bar/src/Assets.xcassets/secure-cloud-50.imageset/secure-cloud-50@2x.png
--------------------------------------------------------------------------------
/custom-navigation-bar/src/ViewController.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | class ViewController: UIViewController {
4 |
5 | override func viewDidLoad() {
6 | super.viewDidLoad()
7 | // Do any additional setup after loading the view.
8 | }
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/custom-navigation-bar/custom-navigation-bar.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/customizable-navigation-bar/customizable-navigation-bar.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/custom-navigation-bar/custom-navigation-bar.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/customizable-navigation-bar/customizable-navigation-bar.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/custom-navigation-bar/src/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | @UIApplicationMain
4 | class AppDelegate: UIResponder, UIApplicationDelegate {
5 |
6 | var window: UIWindow?
7 |
8 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
9 | // Override point for customization after application launch.
10 | return true
11 | }
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Assets.xcassets/sw-rebel-48.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "sw-rebel-48@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Assets.xcassets/sw-empire-48.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "sw-empire-48@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Assets.xcassets/secure-cloud-50.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "secure-cloud-50@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Assets.xcassets/sw-empire-48.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "sw-empire-48@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Assets.xcassets/sw-rebel-48.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "sw-rebel-48@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Assets.xcassets/secure-cloud-50.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "secure-cloud-50@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | @UIApplicationMain
4 | class AppDelegate: UIResponder, UIApplicationDelegate {
5 |
6 | var window: UIWindow?
7 |
8 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
9 | // Override point for customization after application launch.
10 |
11 | window = UIWindow(frame: UIScreen.main.bounds)
12 | window?.makeKeyAndVisible()
13 |
14 | window?.rootViewController = UINavigationController(rootViewController: ViewController())
15 |
16 | return true
17 | }
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2019 Милан Бранковић
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/ViewController.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | class ViewController: UIViewController {
4 |
5 | override func viewDidLoad() {
6 | super.viewDidLoad()
7 | view.backgroundColor = .white
8 |
9 | setupNavigationBar()
10 | }
11 |
12 | private func setupNavigationBar() {
13 | navigationController?.navigationBar.backgroundColor = .white
14 | navigationController?.navigationBar.isTranslucent = false
15 |
16 | setupNavigationBarItems()
17 | }
18 |
19 | private func setupNavigationBarItems() {
20 | navigationItem.title = "Custom navigation bar"
21 |
22 | setupLeftNavigationBar()
23 | setupRightNavigationBar()
24 | }
25 |
26 | private func setupLeftNavigationBar() {
27 | let lockButton = UIButton(type: .system)
28 | lockButton.setImage(UIImage(named: "secure-cloud-50.png"), for: .normal)
29 |
30 | navigationItem.leftBarButtonItem = UIBarButtonItem(customView: lockButton)
31 | }
32 |
33 | private func setupRightNavigationBar() {
34 | let rebelButton = UIButton(type: .system)
35 | rebelButton.setImage(UIImage(named: "sw-rebel-48.png")?.withRenderingMode(.alwaysOriginal), for: .normal)
36 |
37 | let empireButton = UIButton(type: .system)
38 | empireButton.setImage(UIImage(named: "sw-empire-48.png")?.withRenderingMode(.alwaysOriginal), for: .normal)
39 |
40 |
41 | navigationItem.rightBarButtonItems = [UIBarButtonItem(customView: rebelButton), UIBarButtonItem(customView: empireButton)]
42 | }
43 | }
44 |
45 |
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/custom-navigation-bar/src/navigation/NavigationBar.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import UIKit
3 |
4 | final class NavigationBar: UIView {
5 |
6 | private static let NIB_NAME = "NavigationBar"
7 |
8 | @IBOutlet private var view: UIView!
9 | @IBOutlet private weak var leftButton: UIButton!
10 | @IBOutlet private weak var titleLabel: UILabel!
11 | @IBOutlet private weak var rightFirstButton: UIButton!
12 | @IBOutlet private weak var rightSecondButton: UIButton!
13 |
14 | var title: String = "" {
15 | didSet {
16 | titleLabel.text = title
17 | }
18 | }
19 |
20 | var isLeftButtonHidden: Bool {
21 | set {
22 | leftButton.isHidden = newValue
23 | }
24 | get {
25 | return leftButton.isHidden
26 | }
27 | }
28 |
29 | var isRightFirstButtonEnabled: Bool {
30 | set {
31 | rightFirstButton.isEnabled = newValue
32 | }
33 | get {
34 | return rightFirstButton.isEnabled
35 | }
36 | }
37 |
38 | override func awakeFromNib() {
39 | initWithNib()
40 | }
41 |
42 | private func initWithNib() {
43 | Bundle.main.loadNibNamed(NavigationBar.NIB_NAME, owner: self, options: nil)
44 | view.translatesAutoresizingMaskIntoConstraints = false
45 | addSubview(view)
46 | setupLayout()
47 | }
48 |
49 | private func setupLayout() {
50 | NSLayoutConstraint.activate(
51 | [
52 | view.topAnchor.constraint(equalTo: topAnchor),
53 | view.leadingAnchor.constraint(equalTo: leadingAnchor),
54 | view.bottomAnchor.constraint(equalTo: bottomAnchor),
55 | view.trailingAnchor.constraint(equalTo: trailingAnchor),
56 | ]
57 | )
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io/api/xcode,swift,macos
2 | # Edit at https://www.gitignore.io/?templates=xcode,swift,macos
3 |
4 | ### macOS ###
5 | # General
6 | .DS_Store
7 | .AppleDouble
8 | .LSOverride
9 |
10 | # Icon must end with two \r
11 | Icon
12 |
13 | # Thumbnails
14 | ._*
15 |
16 | # Files that might appear in the root of a volume
17 | .DocumentRevisions-V100
18 | .fseventsd
19 | .Spotlight-V100
20 | .TemporaryItems
21 | .Trashes
22 | .VolumeIcon.icns
23 | .com.apple.timemachine.donotpresent
24 |
25 | # Directories potentially created on remote AFP share
26 | .AppleDB
27 | .AppleDesktop
28 | Network Trash Folder
29 | Temporary Items
30 | .apdisk
31 |
32 | ### Swift ###
33 | # Xcode
34 | #
35 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
36 |
37 | ## Build generated
38 | build/
39 | DerivedData/
40 |
41 | ## Various settings
42 | *.pbxuser
43 | !default.pbxuser
44 | *.mode1v3
45 | !default.mode1v3
46 | *.mode2v3
47 | !default.mode2v3
48 | *.perspectivev3
49 | !default.perspectivev3
50 | xcuserdata/
51 |
52 | ## Other
53 | *.moved-aside
54 | *.xccheckout
55 | *.xcscmblueprint
56 |
57 | ## Obj-C/Swift specific
58 | *.hmap
59 | *.ipa
60 | *.dSYM.zip
61 | *.dSYM
62 |
63 | ## Playgrounds
64 | timeline.xctimeline
65 | playground.xcworkspace
66 |
67 | # Swift Package Manager
68 | #
69 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
70 | # Packages/
71 | # Package.pins
72 | # Package.resolved
73 | .build/
74 |
75 | ### Xcode ###
76 | # Xcode
77 | #
78 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
79 |
80 | ### Xcode Patch ###
81 | *.xcodeproj/*
82 | !*.xcodeproj/project.pbxproj
83 | !*.xcodeproj/xcshareddata/
84 | !*.xcworkspace/contents.xcworkspacedata
85 | /*.gcno
86 | **/xcshareddata/WorkspaceSettings.xcsettings
87 |
88 | # End of https://www.gitignore.io/api/xcode,swift,macos
89 |
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/customizable-navigation-bar/src/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/custom-navigation-bar/src/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/custom-navigation-bar/src/navigation/NavigationBar.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | SourceSansPro-Bold
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
40 |
47 |
55 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/customizable-navigation-bar/customizable-navigation-bar.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 2C04AD5F22E838330056F0B2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C04AD5E22E838330056F0B2 /* AppDelegate.swift */; };
11 | 2C04AD6122E838330056F0B2 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C04AD6022E838330056F0B2 /* ViewController.swift */; };
12 | 2C04AD6422E838330056F0B2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C04AD6222E838330056F0B2 /* Main.storyboard */; };
13 | 2C04AD6622E8383C0056F0B2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C04AD6522E8383C0056F0B2 /* Assets.xcassets */; };
14 | 2C04AD6922E8383C0056F0B2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C04AD6722E8383C0056F0B2 /* LaunchScreen.storyboard */; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXFileReference section */
18 | 2C04AD5B22E838330056F0B2 /* customizable-navigation-bar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "customizable-navigation-bar.app"; sourceTree = BUILT_PRODUCTS_DIR; };
19 | 2C04AD5E22E838330056F0B2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
20 | 2C04AD6022E838330056F0B2 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
21 | 2C04AD6322E838330056F0B2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
22 | 2C04AD6522E8383C0056F0B2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
23 | 2C04AD6822E8383C0056F0B2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
24 | 2C04AD6A22E8383C0056F0B2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
25 | /* End PBXFileReference section */
26 |
27 | /* Begin PBXFrameworksBuildPhase section */
28 | 2C04AD5822E838330056F0B2 /* Frameworks */ = {
29 | isa = PBXFrameworksBuildPhase;
30 | buildActionMask = 2147483647;
31 | files = (
32 | );
33 | runOnlyForDeploymentPostprocessing = 0;
34 | };
35 | /* End PBXFrameworksBuildPhase section */
36 |
37 | /* Begin PBXGroup section */
38 | 2C04AD5222E838330056F0B2 = {
39 | isa = PBXGroup;
40 | children = (
41 | 2C04AD5D22E838330056F0B2 /* src */,
42 | 2C04AD5C22E838330056F0B2 /* Products */,
43 | );
44 | sourceTree = "";
45 | };
46 | 2C04AD5C22E838330056F0B2 /* Products */ = {
47 | isa = PBXGroup;
48 | children = (
49 | 2C04AD5B22E838330056F0B2 /* customizable-navigation-bar.app */,
50 | );
51 | name = Products;
52 | sourceTree = "";
53 | };
54 | 2C04AD5D22E838330056F0B2 /* src */ = {
55 | isa = PBXGroup;
56 | children = (
57 | 2C04AD5E22E838330056F0B2 /* AppDelegate.swift */,
58 | 2C04AD6022E838330056F0B2 /* ViewController.swift */,
59 | 2C04AD6222E838330056F0B2 /* Main.storyboard */,
60 | 2C04AD6522E8383C0056F0B2 /* Assets.xcassets */,
61 | 2C04AD6722E8383C0056F0B2 /* LaunchScreen.storyboard */,
62 | 2C04AD6A22E8383C0056F0B2 /* Info.plist */,
63 | );
64 | path = src;
65 | sourceTree = "";
66 | };
67 | /* End PBXGroup section */
68 |
69 | /* Begin PBXNativeTarget section */
70 | 2C04AD5A22E838330056F0B2 /* customizable-navigation-bar */ = {
71 | isa = PBXNativeTarget;
72 | buildConfigurationList = 2C04AD6D22E8383C0056F0B2 /* Build configuration list for PBXNativeTarget "customizable-navigation-bar" */;
73 | buildPhases = (
74 | 2C04AD5722E838330056F0B2 /* Sources */,
75 | 2C04AD5822E838330056F0B2 /* Frameworks */,
76 | 2C04AD5922E838330056F0B2 /* Resources */,
77 | );
78 | buildRules = (
79 | );
80 | dependencies = (
81 | );
82 | name = "customizable-navigation-bar";
83 | productName = "customizable-navigation-bar";
84 | productReference = 2C04AD5B22E838330056F0B2 /* customizable-navigation-bar.app */;
85 | productType = "com.apple.product-type.application";
86 | };
87 | /* End PBXNativeTarget section */
88 |
89 | /* Begin PBXProject section */
90 | 2C04AD5322E838330056F0B2 /* Project object */ = {
91 | isa = PBXProject;
92 | attributes = {
93 | LastSwiftUpdateCheck = 1020;
94 | LastUpgradeCheck = 1020;
95 | ORGANIZATIONNAME = MB;
96 | TargetAttributes = {
97 | 2C04AD5A22E838330056F0B2 = {
98 | CreatedOnToolsVersion = 10.2;
99 | };
100 | };
101 | };
102 | buildConfigurationList = 2C04AD5622E838330056F0B2 /* Build configuration list for PBXProject "customizable-navigation-bar" */;
103 | compatibilityVersion = "Xcode 9.3";
104 | developmentRegion = en;
105 | hasScannedForEncodings = 0;
106 | knownRegions = (
107 | en,
108 | Base,
109 | );
110 | mainGroup = 2C04AD5222E838330056F0B2;
111 | productRefGroup = 2C04AD5C22E838330056F0B2 /* Products */;
112 | projectDirPath = "";
113 | projectRoot = "";
114 | targets = (
115 | 2C04AD5A22E838330056F0B2 /* customizable-navigation-bar */,
116 | );
117 | };
118 | /* End PBXProject section */
119 |
120 | /* Begin PBXResourcesBuildPhase section */
121 | 2C04AD5922E838330056F0B2 /* Resources */ = {
122 | isa = PBXResourcesBuildPhase;
123 | buildActionMask = 2147483647;
124 | files = (
125 | 2C04AD6922E8383C0056F0B2 /* LaunchScreen.storyboard in Resources */,
126 | 2C04AD6622E8383C0056F0B2 /* Assets.xcassets in Resources */,
127 | 2C04AD6422E838330056F0B2 /* Main.storyboard in Resources */,
128 | );
129 | runOnlyForDeploymentPostprocessing = 0;
130 | };
131 | /* End PBXResourcesBuildPhase section */
132 |
133 | /* Begin PBXSourcesBuildPhase section */
134 | 2C04AD5722E838330056F0B2 /* Sources */ = {
135 | isa = PBXSourcesBuildPhase;
136 | buildActionMask = 2147483647;
137 | files = (
138 | 2C04AD6122E838330056F0B2 /* ViewController.swift in Sources */,
139 | 2C04AD5F22E838330056F0B2 /* AppDelegate.swift in Sources */,
140 | );
141 | runOnlyForDeploymentPostprocessing = 0;
142 | };
143 | /* End PBXSourcesBuildPhase section */
144 |
145 | /* Begin PBXVariantGroup section */
146 | 2C04AD6222E838330056F0B2 /* Main.storyboard */ = {
147 | isa = PBXVariantGroup;
148 | children = (
149 | 2C04AD6322E838330056F0B2 /* Base */,
150 | );
151 | name = Main.storyboard;
152 | sourceTree = "";
153 | };
154 | 2C04AD6722E8383C0056F0B2 /* LaunchScreen.storyboard */ = {
155 | isa = PBXVariantGroup;
156 | children = (
157 | 2C04AD6822E8383C0056F0B2 /* Base */,
158 | );
159 | name = LaunchScreen.storyboard;
160 | sourceTree = "";
161 | };
162 | /* End PBXVariantGroup section */
163 |
164 | /* Begin XCBuildConfiguration section */
165 | 2C04AD6B22E8383C0056F0B2 /* Debug */ = {
166 | isa = XCBuildConfiguration;
167 | buildSettings = {
168 | ALWAYS_SEARCH_USER_PATHS = NO;
169 | CLANG_ANALYZER_NONNULL = YES;
170 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
171 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
172 | CLANG_CXX_LIBRARY = "libc++";
173 | CLANG_ENABLE_MODULES = YES;
174 | CLANG_ENABLE_OBJC_ARC = YES;
175 | CLANG_ENABLE_OBJC_WEAK = YES;
176 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
177 | CLANG_WARN_BOOL_CONVERSION = YES;
178 | CLANG_WARN_COMMA = YES;
179 | CLANG_WARN_CONSTANT_CONVERSION = YES;
180 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
181 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
182 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
183 | CLANG_WARN_EMPTY_BODY = YES;
184 | CLANG_WARN_ENUM_CONVERSION = YES;
185 | CLANG_WARN_INFINITE_RECURSION = YES;
186 | CLANG_WARN_INT_CONVERSION = YES;
187 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
188 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
189 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
190 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
191 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
192 | CLANG_WARN_STRICT_PROTOTYPES = YES;
193 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
194 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
195 | CLANG_WARN_UNREACHABLE_CODE = YES;
196 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
197 | CODE_SIGN_IDENTITY = "iPhone Developer";
198 | COPY_PHASE_STRIP = NO;
199 | DEBUG_INFORMATION_FORMAT = dwarf;
200 | ENABLE_STRICT_OBJC_MSGSEND = YES;
201 | ENABLE_TESTABILITY = YES;
202 | GCC_C_LANGUAGE_STANDARD = gnu11;
203 | GCC_DYNAMIC_NO_PIC = NO;
204 | GCC_NO_COMMON_BLOCKS = YES;
205 | GCC_OPTIMIZATION_LEVEL = 0;
206 | GCC_PREPROCESSOR_DEFINITIONS = (
207 | "DEBUG=1",
208 | "$(inherited)",
209 | );
210 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
211 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
212 | GCC_WARN_UNDECLARED_SELECTOR = YES;
213 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
214 | GCC_WARN_UNUSED_FUNCTION = YES;
215 | GCC_WARN_UNUSED_VARIABLE = YES;
216 | IPHONEOS_DEPLOYMENT_TARGET = 12.2;
217 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
218 | MTL_FAST_MATH = YES;
219 | ONLY_ACTIVE_ARCH = YES;
220 | SDKROOT = iphoneos;
221 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
222 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
223 | };
224 | name = Debug;
225 | };
226 | 2C04AD6C22E8383C0056F0B2 /* Release */ = {
227 | isa = XCBuildConfiguration;
228 | buildSettings = {
229 | ALWAYS_SEARCH_USER_PATHS = NO;
230 | CLANG_ANALYZER_NONNULL = YES;
231 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
232 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
233 | CLANG_CXX_LIBRARY = "libc++";
234 | CLANG_ENABLE_MODULES = YES;
235 | CLANG_ENABLE_OBJC_ARC = YES;
236 | CLANG_ENABLE_OBJC_WEAK = YES;
237 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
238 | CLANG_WARN_BOOL_CONVERSION = YES;
239 | CLANG_WARN_COMMA = YES;
240 | CLANG_WARN_CONSTANT_CONVERSION = YES;
241 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
242 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
243 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
244 | CLANG_WARN_EMPTY_BODY = YES;
245 | CLANG_WARN_ENUM_CONVERSION = YES;
246 | CLANG_WARN_INFINITE_RECURSION = YES;
247 | CLANG_WARN_INT_CONVERSION = YES;
248 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
249 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
250 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
251 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
252 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
253 | CLANG_WARN_STRICT_PROTOTYPES = YES;
254 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
255 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
256 | CLANG_WARN_UNREACHABLE_CODE = YES;
257 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
258 | CODE_SIGN_IDENTITY = "iPhone Developer";
259 | COPY_PHASE_STRIP = NO;
260 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
261 | ENABLE_NS_ASSERTIONS = NO;
262 | ENABLE_STRICT_OBJC_MSGSEND = YES;
263 | GCC_C_LANGUAGE_STANDARD = gnu11;
264 | GCC_NO_COMMON_BLOCKS = YES;
265 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
266 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
267 | GCC_WARN_UNDECLARED_SELECTOR = YES;
268 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
269 | GCC_WARN_UNUSED_FUNCTION = YES;
270 | GCC_WARN_UNUSED_VARIABLE = YES;
271 | IPHONEOS_DEPLOYMENT_TARGET = 12.2;
272 | MTL_ENABLE_DEBUG_INFO = NO;
273 | MTL_FAST_MATH = YES;
274 | SDKROOT = iphoneos;
275 | SWIFT_COMPILATION_MODE = wholemodule;
276 | SWIFT_OPTIMIZATION_LEVEL = "-O";
277 | VALIDATE_PRODUCT = YES;
278 | };
279 | name = Release;
280 | };
281 | 2C04AD6E22E8383C0056F0B2 /* Debug */ = {
282 | isa = XCBuildConfiguration;
283 | buildSettings = {
284 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
285 | CODE_SIGN_STYLE = Automatic;
286 | DEVELOPMENT_TEAM = T85JF8Y85D;
287 | INFOPLIST_FILE = "$(SRCROOT)/src/Info.plist";
288 | LD_RUNPATH_SEARCH_PATHS = (
289 | "$(inherited)",
290 | "@executable_path/Frameworks",
291 | );
292 | PRODUCT_BUNDLE_IDENTIFIER = "com.mb.customizable-navigation-bar";
293 | PRODUCT_NAME = "$(TARGET_NAME)";
294 | SWIFT_VERSION = 5.0;
295 | TARGETED_DEVICE_FAMILY = "1,2";
296 | };
297 | name = Debug;
298 | };
299 | 2C04AD6F22E8383C0056F0B2 /* Release */ = {
300 | isa = XCBuildConfiguration;
301 | buildSettings = {
302 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
303 | CODE_SIGN_STYLE = Automatic;
304 | DEVELOPMENT_TEAM = T85JF8Y85D;
305 | INFOPLIST_FILE = "$(SRCROOT)/src/Info.plist";
306 | LD_RUNPATH_SEARCH_PATHS = (
307 | "$(inherited)",
308 | "@executable_path/Frameworks",
309 | );
310 | PRODUCT_BUNDLE_IDENTIFIER = "com.mb.customizable-navigation-bar";
311 | PRODUCT_NAME = "$(TARGET_NAME)";
312 | SWIFT_VERSION = 5.0;
313 | TARGETED_DEVICE_FAMILY = "1,2";
314 | };
315 | name = Release;
316 | };
317 | /* End XCBuildConfiguration section */
318 |
319 | /* Begin XCConfigurationList section */
320 | 2C04AD5622E838330056F0B2 /* Build configuration list for PBXProject "customizable-navigation-bar" */ = {
321 | isa = XCConfigurationList;
322 | buildConfigurations = (
323 | 2C04AD6B22E8383C0056F0B2 /* Debug */,
324 | 2C04AD6C22E8383C0056F0B2 /* Release */,
325 | );
326 | defaultConfigurationIsVisible = 0;
327 | defaultConfigurationName = Release;
328 | };
329 | 2C04AD6D22E8383C0056F0B2 /* Build configuration list for PBXNativeTarget "customizable-navigation-bar" */ = {
330 | isa = XCConfigurationList;
331 | buildConfigurations = (
332 | 2C04AD6E22E8383C0056F0B2 /* Debug */,
333 | 2C04AD6F22E8383C0056F0B2 /* Release */,
334 | );
335 | defaultConfigurationIsVisible = 0;
336 | defaultConfigurationName = Release;
337 | };
338 | /* End XCConfigurationList section */
339 | };
340 | rootObject = 2C04AD5322E838330056F0B2 /* Project object */;
341 | }
342 |
--------------------------------------------------------------------------------
/custom-navigation-bar/custom-navigation-bar.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 2C23995322ED81BD00DAD9CC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C23995222ED81BD00DAD9CC /* AppDelegate.swift */; };
11 | 2C23995522ED81BD00DAD9CC /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C23995422ED81BD00DAD9CC /* ViewController.swift */; };
12 | 2C23995822ED81BD00DAD9CC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C23995622ED81BD00DAD9CC /* Main.storyboard */; };
13 | 2C23995A22ED81BF00DAD9CC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C23995922ED81BF00DAD9CC /* Assets.xcassets */; };
14 | 2C23995D22ED81BF00DAD9CC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C23995B22ED81BF00DAD9CC /* LaunchScreen.storyboard */; };
15 | 2C23996922ED845000DAD9CC /* NavigationBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2C23996822ED845000DAD9CC /* NavigationBar.xib */; };
16 | 2C23996B22ED866F00DAD9CC /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C23996A22ED866F00DAD9CC /* NavigationBar.swift */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXFileReference section */
20 | 2C23994F22ED81BD00DAD9CC /* custom-navigation-bar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "custom-navigation-bar.app"; sourceTree = BUILT_PRODUCTS_DIR; };
21 | 2C23995222ED81BD00DAD9CC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
22 | 2C23995422ED81BD00DAD9CC /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
23 | 2C23995722ED81BD00DAD9CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
24 | 2C23995922ED81BF00DAD9CC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
25 | 2C23995C22ED81BF00DAD9CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
26 | 2C23995E22ED81BF00DAD9CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
27 | 2C23996822ED845000DAD9CC /* NavigationBar.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NavigationBar.xib; sourceTree = ""; };
28 | 2C23996A22ED866F00DAD9CC /* NavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBar.swift; sourceTree = ""; };
29 | /* End PBXFileReference section */
30 |
31 | /* Begin PBXFrameworksBuildPhase section */
32 | 2C23994C22ED81BD00DAD9CC /* Frameworks */ = {
33 | isa = PBXFrameworksBuildPhase;
34 | buildActionMask = 2147483647;
35 | files = (
36 | );
37 | runOnlyForDeploymentPostprocessing = 0;
38 | };
39 | /* End PBXFrameworksBuildPhase section */
40 |
41 | /* Begin PBXGroup section */
42 | 2C23994622ED81BD00DAD9CC = {
43 | isa = PBXGroup;
44 | children = (
45 | 2C23995122ED81BD00DAD9CC /* src */,
46 | 2C23995022ED81BD00DAD9CC /* Products */,
47 | );
48 | sourceTree = "";
49 | };
50 | 2C23995022ED81BD00DAD9CC /* Products */ = {
51 | isa = PBXGroup;
52 | children = (
53 | 2C23994F22ED81BD00DAD9CC /* custom-navigation-bar.app */,
54 | );
55 | name = Products;
56 | sourceTree = "";
57 | };
58 | 2C23995122ED81BD00DAD9CC /* src */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 2C23996722ED842D00DAD9CC /* navigation */,
62 | 2C23995222ED81BD00DAD9CC /* AppDelegate.swift */,
63 | 2C23995422ED81BD00DAD9CC /* ViewController.swift */,
64 | 2C23995622ED81BD00DAD9CC /* Main.storyboard */,
65 | 2C23995922ED81BF00DAD9CC /* Assets.xcassets */,
66 | 2C23995B22ED81BF00DAD9CC /* LaunchScreen.storyboard */,
67 | 2C23995E22ED81BF00DAD9CC /* Info.plist */,
68 | );
69 | path = src;
70 | sourceTree = "";
71 | };
72 | 2C23996722ED842D00DAD9CC /* navigation */ = {
73 | isa = PBXGroup;
74 | children = (
75 | 2C23996822ED845000DAD9CC /* NavigationBar.xib */,
76 | 2C23996A22ED866F00DAD9CC /* NavigationBar.swift */,
77 | );
78 | path = navigation;
79 | sourceTree = "";
80 | };
81 | /* End PBXGroup section */
82 |
83 | /* Begin PBXNativeTarget section */
84 | 2C23994E22ED81BD00DAD9CC /* custom-navigation-bar */ = {
85 | isa = PBXNativeTarget;
86 | buildConfigurationList = 2C23996122ED81BF00DAD9CC /* Build configuration list for PBXNativeTarget "custom-navigation-bar" */;
87 | buildPhases = (
88 | 2C23994B22ED81BD00DAD9CC /* Sources */,
89 | 2C23994C22ED81BD00DAD9CC /* Frameworks */,
90 | 2C23994D22ED81BD00DAD9CC /* Resources */,
91 | );
92 | buildRules = (
93 | );
94 | dependencies = (
95 | );
96 | name = "custom-navigation-bar";
97 | productName = "custom-navigation-bar";
98 | productReference = 2C23994F22ED81BD00DAD9CC /* custom-navigation-bar.app */;
99 | productType = "com.apple.product-type.application";
100 | };
101 | /* End PBXNativeTarget section */
102 |
103 | /* Begin PBXProject section */
104 | 2C23994722ED81BD00DAD9CC /* Project object */ = {
105 | isa = PBXProject;
106 | attributes = {
107 | LastSwiftUpdateCheck = 1020;
108 | LastUpgradeCheck = 1020;
109 | ORGANIZATIONNAME = MB;
110 | TargetAttributes = {
111 | 2C23994E22ED81BD00DAD9CC = {
112 | CreatedOnToolsVersion = 10.2;
113 | };
114 | };
115 | };
116 | buildConfigurationList = 2C23994A22ED81BD00DAD9CC /* Build configuration list for PBXProject "custom-navigation-bar" */;
117 | compatibilityVersion = "Xcode 9.3";
118 | developmentRegion = en;
119 | hasScannedForEncodings = 0;
120 | knownRegions = (
121 | en,
122 | Base,
123 | );
124 | mainGroup = 2C23994622ED81BD00DAD9CC;
125 | productRefGroup = 2C23995022ED81BD00DAD9CC /* Products */;
126 | projectDirPath = "";
127 | projectRoot = "";
128 | targets = (
129 | 2C23994E22ED81BD00DAD9CC /* custom-navigation-bar */,
130 | );
131 | };
132 | /* End PBXProject section */
133 |
134 | /* Begin PBXResourcesBuildPhase section */
135 | 2C23994D22ED81BD00DAD9CC /* Resources */ = {
136 | isa = PBXResourcesBuildPhase;
137 | buildActionMask = 2147483647;
138 | files = (
139 | 2C23995D22ED81BF00DAD9CC /* LaunchScreen.storyboard in Resources */,
140 | 2C23995A22ED81BF00DAD9CC /* Assets.xcassets in Resources */,
141 | 2C23995822ED81BD00DAD9CC /* Main.storyboard in Resources */,
142 | 2C23996922ED845000DAD9CC /* NavigationBar.xib in Resources */,
143 | );
144 | runOnlyForDeploymentPostprocessing = 0;
145 | };
146 | /* End PBXResourcesBuildPhase section */
147 |
148 | /* Begin PBXSourcesBuildPhase section */
149 | 2C23994B22ED81BD00DAD9CC /* Sources */ = {
150 | isa = PBXSourcesBuildPhase;
151 | buildActionMask = 2147483647;
152 | files = (
153 | 2C23995522ED81BD00DAD9CC /* ViewController.swift in Sources */,
154 | 2C23995322ED81BD00DAD9CC /* AppDelegate.swift in Sources */,
155 | 2C23996B22ED866F00DAD9CC /* NavigationBar.swift in Sources */,
156 | );
157 | runOnlyForDeploymentPostprocessing = 0;
158 | };
159 | /* End PBXSourcesBuildPhase section */
160 |
161 | /* Begin PBXVariantGroup section */
162 | 2C23995622ED81BD00DAD9CC /* Main.storyboard */ = {
163 | isa = PBXVariantGroup;
164 | children = (
165 | 2C23995722ED81BD00DAD9CC /* Base */,
166 | );
167 | name = Main.storyboard;
168 | sourceTree = "";
169 | };
170 | 2C23995B22ED81BF00DAD9CC /* LaunchScreen.storyboard */ = {
171 | isa = PBXVariantGroup;
172 | children = (
173 | 2C23995C22ED81BF00DAD9CC /* Base */,
174 | );
175 | name = LaunchScreen.storyboard;
176 | sourceTree = "";
177 | };
178 | /* End PBXVariantGroup section */
179 |
180 | /* Begin XCBuildConfiguration section */
181 | 2C23995F22ED81BF00DAD9CC /* Debug */ = {
182 | isa = XCBuildConfiguration;
183 | buildSettings = {
184 | ALWAYS_SEARCH_USER_PATHS = NO;
185 | CLANG_ANALYZER_NONNULL = YES;
186 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
187 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
188 | CLANG_CXX_LIBRARY = "libc++";
189 | CLANG_ENABLE_MODULES = YES;
190 | CLANG_ENABLE_OBJC_ARC = YES;
191 | CLANG_ENABLE_OBJC_WEAK = YES;
192 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
193 | CLANG_WARN_BOOL_CONVERSION = YES;
194 | CLANG_WARN_COMMA = YES;
195 | CLANG_WARN_CONSTANT_CONVERSION = YES;
196 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
197 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
198 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
199 | CLANG_WARN_EMPTY_BODY = YES;
200 | CLANG_WARN_ENUM_CONVERSION = YES;
201 | CLANG_WARN_INFINITE_RECURSION = YES;
202 | CLANG_WARN_INT_CONVERSION = YES;
203 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
204 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
205 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
206 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
207 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
208 | CLANG_WARN_STRICT_PROTOTYPES = YES;
209 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
210 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
211 | CLANG_WARN_UNREACHABLE_CODE = YES;
212 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
213 | CODE_SIGN_IDENTITY = "iPhone Developer";
214 | COPY_PHASE_STRIP = NO;
215 | DEBUG_INFORMATION_FORMAT = dwarf;
216 | ENABLE_STRICT_OBJC_MSGSEND = YES;
217 | ENABLE_TESTABILITY = YES;
218 | GCC_C_LANGUAGE_STANDARD = gnu11;
219 | GCC_DYNAMIC_NO_PIC = NO;
220 | GCC_NO_COMMON_BLOCKS = YES;
221 | GCC_OPTIMIZATION_LEVEL = 0;
222 | GCC_PREPROCESSOR_DEFINITIONS = (
223 | "DEBUG=1",
224 | "$(inherited)",
225 | );
226 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
227 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
228 | GCC_WARN_UNDECLARED_SELECTOR = YES;
229 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
230 | GCC_WARN_UNUSED_FUNCTION = YES;
231 | GCC_WARN_UNUSED_VARIABLE = YES;
232 | IPHONEOS_DEPLOYMENT_TARGET = 12.2;
233 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
234 | MTL_FAST_MATH = YES;
235 | ONLY_ACTIVE_ARCH = YES;
236 | SDKROOT = iphoneos;
237 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
238 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
239 | };
240 | name = Debug;
241 | };
242 | 2C23996022ED81BF00DAD9CC /* Release */ = {
243 | isa = XCBuildConfiguration;
244 | buildSettings = {
245 | ALWAYS_SEARCH_USER_PATHS = NO;
246 | CLANG_ANALYZER_NONNULL = YES;
247 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
248 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
249 | CLANG_CXX_LIBRARY = "libc++";
250 | CLANG_ENABLE_MODULES = YES;
251 | CLANG_ENABLE_OBJC_ARC = YES;
252 | CLANG_ENABLE_OBJC_WEAK = YES;
253 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
254 | CLANG_WARN_BOOL_CONVERSION = YES;
255 | CLANG_WARN_COMMA = YES;
256 | CLANG_WARN_CONSTANT_CONVERSION = YES;
257 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
258 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
259 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
260 | CLANG_WARN_EMPTY_BODY = YES;
261 | CLANG_WARN_ENUM_CONVERSION = YES;
262 | CLANG_WARN_INFINITE_RECURSION = YES;
263 | CLANG_WARN_INT_CONVERSION = YES;
264 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
265 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
266 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
267 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
268 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
269 | CLANG_WARN_STRICT_PROTOTYPES = YES;
270 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
271 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
272 | CLANG_WARN_UNREACHABLE_CODE = YES;
273 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
274 | CODE_SIGN_IDENTITY = "iPhone Developer";
275 | COPY_PHASE_STRIP = NO;
276 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
277 | ENABLE_NS_ASSERTIONS = NO;
278 | ENABLE_STRICT_OBJC_MSGSEND = YES;
279 | GCC_C_LANGUAGE_STANDARD = gnu11;
280 | GCC_NO_COMMON_BLOCKS = YES;
281 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
282 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
283 | GCC_WARN_UNDECLARED_SELECTOR = YES;
284 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
285 | GCC_WARN_UNUSED_FUNCTION = YES;
286 | GCC_WARN_UNUSED_VARIABLE = YES;
287 | IPHONEOS_DEPLOYMENT_TARGET = 12.2;
288 | MTL_ENABLE_DEBUG_INFO = NO;
289 | MTL_FAST_MATH = YES;
290 | SDKROOT = iphoneos;
291 | SWIFT_COMPILATION_MODE = wholemodule;
292 | SWIFT_OPTIMIZATION_LEVEL = "-O";
293 | VALIDATE_PRODUCT = YES;
294 | };
295 | name = Release;
296 | };
297 | 2C23996222ED81BF00DAD9CC /* Debug */ = {
298 | isa = XCBuildConfiguration;
299 | buildSettings = {
300 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
301 | CODE_SIGN_STYLE = Automatic;
302 | DEVELOPMENT_TEAM = T85JF8Y85D;
303 | INFOPLIST_FILE = "$(SRCROOT)/src/Info.plist";
304 | LD_RUNPATH_SEARCH_PATHS = (
305 | "$(inherited)",
306 | "@executable_path/Frameworks",
307 | );
308 | PRODUCT_BUNDLE_IDENTIFIER = "com.mb.custom-navigation-bar";
309 | PRODUCT_NAME = "$(TARGET_NAME)";
310 | SWIFT_VERSION = 5.0;
311 | TARGETED_DEVICE_FAMILY = "1,2";
312 | };
313 | name = Debug;
314 | };
315 | 2C23996322ED81BF00DAD9CC /* Release */ = {
316 | isa = XCBuildConfiguration;
317 | buildSettings = {
318 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
319 | CODE_SIGN_STYLE = Automatic;
320 | DEVELOPMENT_TEAM = T85JF8Y85D;
321 | INFOPLIST_FILE = "$(SRCROOT)/src/Info.plist";
322 | LD_RUNPATH_SEARCH_PATHS = (
323 | "$(inherited)",
324 | "@executable_path/Frameworks",
325 | );
326 | PRODUCT_BUNDLE_IDENTIFIER = "com.mb.custom-navigation-bar";
327 | PRODUCT_NAME = "$(TARGET_NAME)";
328 | SWIFT_VERSION = 5.0;
329 | TARGETED_DEVICE_FAMILY = "1,2";
330 | };
331 | name = Release;
332 | };
333 | /* End XCBuildConfiguration section */
334 |
335 | /* Begin XCConfigurationList section */
336 | 2C23994A22ED81BD00DAD9CC /* Build configuration list for PBXProject "custom-navigation-bar" */ = {
337 | isa = XCConfigurationList;
338 | buildConfigurations = (
339 | 2C23995F22ED81BF00DAD9CC /* Debug */,
340 | 2C23996022ED81BF00DAD9CC /* Release */,
341 | );
342 | defaultConfigurationIsVisible = 0;
343 | defaultConfigurationName = Release;
344 | };
345 | 2C23996122ED81BF00DAD9CC /* Build configuration list for PBXNativeTarget "custom-navigation-bar" */ = {
346 | isa = XCConfigurationList;
347 | buildConfigurations = (
348 | 2C23996222ED81BF00DAD9CC /* Debug */,
349 | 2C23996322ED81BF00DAD9CC /* Release */,
350 | );
351 | defaultConfigurationIsVisible = 0;
352 | defaultConfigurationName = Release;
353 | };
354 | /* End XCConfigurationList section */
355 | };
356 | rootObject = 2C23994722ED81BD00DAD9CC /* Project object */;
357 | }
358 |
--------------------------------------------------------------------------------