Skip to content

Commit 57c68b1

Browse files
committed
Use UINavigationBar
1 parent 570806f commit 57c68b1

File tree

1 file changed

+42
-11
lines changed

1 file changed

+42
-11
lines changed

Sources/BarcodeScannerController.swift

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ open class BarcodeScannerController: UIViewController {
3535
private lazy var captureSession: AVCaptureSession = AVCaptureSession()
3636

3737
/// Header view with title and close button.
38-
private lazy var headerView: HeaderView = HeaderView()
38+
private lazy var navigationBar: UINavigationBar = UINavigationBar()
3939

4040
/// Information view with description label.
4141
private lazy var infoView: InfoView = InfoView()
@@ -186,27 +186,57 @@ open class BarcodeScannerController: UIViewController {
186186

187187
view.layer.addSublayer(videoPreviewLayer)
188188

189-
[infoView, headerView, settingsButton, flashButton, focusView].forEach {
189+
[infoView, navigationBar, settingsButton, flashButton, focusView].forEach {
190190
view.addSubview($0)
191191
view.bringSubview(toFront: $0)
192192
}
193193

194194
torchMode = .off
195195
focusView.isHidden = true
196-
headerView.delegate = self
197196

198197
setupCamera()
199198

200199
NotificationCenter.default.addObserver(
201200
self, selector: #selector(appWillEnterForeground),
202201
name: NSNotification.Name.UIApplicationWillEnterForeground,
203202
object: nil)
203+
204+
// navigationBar
205+
let item = UINavigationItem()
206+
let closeButton = HeaderElement.makeCloseButton()
207+
closeButton.addTarget(
208+
self,
209+
action: #selector(closeButtonDidTouched),
210+
for: .touchUpInside
211+
)
212+
item.leftBarButtonItem = UIBarButtonItem(customView: closeButton)
213+
item.titleView = HeaderElement.makeLabel()
214+
215+
navigationBar.isTranslucent = false
216+
navigationBar.delegate = self
217+
navigationBar.backgroundColor = Title.backgroundColor
218+
navigationBar.items = [item]
219+
220+
navigationBar.translatesAutoresizingMaskIntoConstraints = false
221+
navigationBar.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
222+
navigationBar.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
223+
224+
if #available(iOS 11, *) {
225+
navigationBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
226+
} else {
227+
navigationBar.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
228+
}
204229
}
205230

206231
open override func viewWillAppear(_ animated: Bool) {
207232
super.viewWillAppear(animated)
208-
209-
headerView.isHidden = !isBeingPresented
233+
234+
if navigationController != nil {
235+
navigationItem.titleView = HeaderElement.makeLabel()
236+
navigationBar.isHidden = true
237+
} else {
238+
navigationBar.isHidden = false
239+
}
210240
}
211241

212242
open override func viewDidAppear(_ animated: Bool) {
@@ -232,6 +262,10 @@ open class BarcodeScannerController: UIViewController {
232262
animateFocusView()
233263
}
234264

265+
@objc private func closeButtonDidTouched() {
266+
dismissalDelegate?.barcodeScannerDidDismiss(self)
267+
}
268+
235269
// MARK: - Configuration
236270

237271
/**
@@ -329,7 +363,6 @@ open class BarcodeScannerController: UIViewController {
329363
// On iPhone X devices, extend the size of the top nav bar
330364
let navbarSize: CGFloat = isLandscape ? 32 : insets.top > 0 ? 88 : 64
331365

332-
headerView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: navbarSize)
333366
flashButton.frame = CGRect(
334367
x: view.frame.width - 50 - insets.right,
335368
y: navbarSize + 10 + (flashButtonSize / 2),
@@ -477,10 +510,8 @@ extension BarcodeScannerController: AVCaptureMetadataOutputObjectsDelegate {
477510
}
478511
}
479512

480-
// MARK: - HeaderViewDelegate
481-
482-
extension BarcodeScannerController: HeaderViewDelegate {
483-
func headerViewDidPressClose(_ headerView: HeaderView) {
484-
dismissalDelegate?.barcodeScannerDidDismiss(self)
513+
extension BarcodeScannerController: UINavigationBarDelegate {
514+
public func position(for bar: UIBarPositioning) -> UIBarPosition {
515+
return .topAttached
485516
}
486517
}

0 commit comments

Comments
 (0)