В настоящее время я накладываю UIView
при нажатии кнопки поверх viewController
. У меня это хорошо позиционируется на других устройствах экрана и когда я запускаю на iPhone X +
устройствах. Его не очень хорошо. Чтобы он хорошо позиционировался, мне нужно вычесть 40 баллов до его текущего top safeAreaInsets
Первые 20 баллов должны справиться со строкой состояния. Когда я делаю это, это работает, а затем не работает на других iPhone, у которых нет метки. Что я здесь не так делаю. Вот мой код
func contentFrame(extraTopOffset pOffset: CGFloat = 0) -> CGRect {
var theFrame = self.view.bounds
if let navBar = self.navigationBar {
let topOffset = navBar.frame.origin.y + navBar.frame.size.height
theFrame.size.height -= topOffset
theFrame.origin.y += topOffset
}
if #available(iOS 11.0, *) {
let safeInsets = UIApplication.shared.delegate!.window!?.safeAreaInsets
let topOffset = safeInsets!.top - (20 + pOffset)
theFrame.origin.y += topOffset
theFrame.size.height -= topOffset + safeInsets!.bottom
}
return theFrame
}
Где я показываю оверлей в другом viewController, где я переопределяю метод
override func showOverlay() {
self.overlayView.frame = self.contentFrame()
self.view.addSubview(self.overlayView)
}