@@ -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