Наложение камеры средства выбора изображения в безопасной зоне для Iphone x и выше не работает

Я создал собственный пользовательский интерфейс и назначил его наложению камеры UIImagePickerController, как показано ниже.

Пользовательский вид

    cameraOverlay = RecordView.loadNib()
    cameraOverlay.frame = UIScreen.main.bounds
    cameraOverlay.buttonStartRecording.addTarget(self, action: #selector(buttonStartStopRecordingClicked),
                                                 for: .touchUpInside)
    cameraOverlay.buttonCancel.addTarget(self, action: #selector(buttonCancelClicked), for: .touchUpInside)
    cameraOverlay.buttonSwitchCamera.addTarget(self, action: #selector(buttonCameraSwitchClicked), for: .touchUpInside)
    
    cameraOverlay.buttonFlash.addTarget(self, action: #selector(buttonFlashClicked), for: .touchUpInside)
    cameraOverlay.labelTimer.text = "00:00/\(self.secondsToHoursMinutesSeconds(inputSeconds: recordingTimeLimit))"

Контроллер выбора изображений

    imagePicker.delegate = self
    imagePicker.sourceType = .camera
    imagePicker.mediaTypes = [kUTTypeMovie as String]
    imagePicker.allowsEditing = true
    imagePicker.cameraOverlayView = cameraOverlay
    imagePicker.showsCameraControls = false
    imagePicker.cameraFlashMode = .off
    imagePicker.cameraCaptureMode = .video
    imagePicker.cameraDevice = .rear
    self.present(imagePicker, animated: true, completion: nil)

Это отлично работает с камерой без выреза, но пользовательский интерфейс обрезается сверху за вырезом на iPhone X и выше. Мне каким-то образом нужно установить собственное наложение в безопасной области, но я не знаю, как это можно сделать. Пожалуйста, может кто-нибудь помочь мне здесь. Заранее спасибо.


person PersianBlue    schedule 15.04.2021    source источник


Ответы (1)


Я проверил, есть ли вырез на телефоне.

  var hasNotch: Bool {
    let bottom = UIApplication.shared.delegate?.window??.safeAreaInsets.bottom ?? 0
    return bottom > 0
}

И затем обрабатывать ограничения на основе этого

topHeightConstraint.constant = hasNotch ? 94 : 50
instructionBottomConstriant.constant = hasNotch ? 60 : 40
person PersianBlue    schedule 19.04.2021