2017-11-30 14 views
-1

私のiPhone 6 Plusでうまく動作するアプリを作っています。このアプリには、明らかにカメラを起動するQRコードスキャン機能が含まれています。カメラを実行すると、iPhone 6 Plusでフルスクリーンで動作しますが、iPhone Xでは動作しません。カメラはまだ動作しますが、カメラビューの上下に白いバーがあります。任意のヒント?ここ (iPhoneX)カメラを起動しているときに、画面の上下に空白があります

は、スキャナのコードです:

import UIKit 
import AVFoundation 
import SafariServices 

class Attend: UIViewController, AVCaptureMetadataOutputObjectsDelegate { 

@IBOutlet weak var border: UIImageView! 

var video = AVCaptureVideoPreviewLayer() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let session = AVCaptureSession() 

    let captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 

    do 
    { 
     let input = try AVCaptureDeviceInput(device: captureDevice) 
     session.addInput(input) 
    } 

    catch 
    { 
     print ("ERROR") 
    } 

    let output = AVCaptureMetadataOutput() 
    session.addOutput(output) 

    output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 

    output.metadataObjectTypes = [AVMetadataObjectTypeQRCode] 

    video = AVCaptureVideoPreviewLayer(session: session) 
    video.frame = view.layer.bounds 
    view.layer.addSublayer(video) 

    self.view.bringSubview(toFront: border) 

    session.startRunning() 


} 


func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 
    if metadataObjects != nil && metadataObjects.count != 0 
    { 
     if let object = metadataObjects[0] as? AVMetadataMachineReadableCodeObject 
     { 
      if object.type == AVMetadataObjectTypeQRCode 
      { 
       let alert = UIAlertController(title: "QR Code", message: object.stringValue, preferredStyle: .alert) 
       alert.addAction(UIAlertAction(title: "Retake", style: .default, handler: nil)) 
       alert.addAction(UIAlertAction(title: "Open", style: .default, handler: { (nil) in 
        UIPasteboard.general.string = object.stringValue 
        self.loadSafari(url: object.stringValue) 
       })) 
       present(alert, animated: true, completion: nil) 

      } 
     } 
    } 

} 


func loadSafari(url : String){ 
    guard let url = URL(string: url) else { return } 

    let safariController = SFSafariViewController(url: url) 
    present(safariController, animated: true, completion: nil) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 




} 
+0

これらの白い部分は安全なマージンとして知られています。マージン、self.viewはそれらの領域を超えて通過しません。センサーバーまたはボトムラインの後ろに隠れてしまうことはありません。 –

+0

返信ありがとうございます。 しかし、私はカメラをフルスクリーンで動かすだけです。私はセンサーバーの部分は気にしない。 – Ibrahim

+0

あなたはUIApplicationWindowで追加しようとすることができます –

答えて

0

1 - 代わりに、起動画像のLaunchSceen.storyboardを使用する - あなたの一番下のカットの問題が解決されます 2 - あなたのビュー

の安全なエリアからあなたの一番上制約を作ります
関連する問題