Вот проект этой проблемы на диске Google: https://drive.google.com/file/d/1Js0t-stoerWy8O8uIOJl_bDw-bnWAZPr/view?usp=sharing
Я создаю пользовательскую панель навигации (красный вид на рисунке ниже), используя код IBDesignable ниже.Я хочу, чтобы у iPhone был на высшем уровне, как у iPhone X, iPhone XR, тогда высота пользовательской панели навигации равна 88, в противном случае высота равна 64. Я создаю код IBDesignable, чтобы я мог повторно использовать этот код
import UIKit
@IBDesignable
class CustomParentNavigationBarView: UIView {
override func awakeFromNib() {
super.awakeFromNib()
self.setHeight()
}
override func layoutSubviews() {
super.layoutSubviews()
self.setHeight()
}
func setHeight() {
let deviceHasTopNotch = checkHasTopNotchOrNot()
layer.frame.size.height = deviceHasTopNotch ? 88 : 64
}
func checkHasTopNotchOrNot() -> Bool {
if #available(iOS 11.0, tvOS 11.0, *) {
// with notch: 44.0 on iPhone X, XS, XS Max, XR.
// without notch: 20.0 on iPhone 8 on iOS 12+.
return UIApplication.shared.delegate?.window??.safeAreaInsets.top ?? 0 > 20
}
return false
}
}
Я присваиваю CustomParentNavigationBarView
красному виду
и затем ставлю метку.который должен располагаться точно под красным видом (пользовательская панель навигации, использующая IBDesignable)
это прекрасно смотрится, если я запускаю приложение на iPhone, которое не имеет высшей ступени, как iPhone8
, но, если я запускаю приложение на iPhone, которое имеет высшую отметку, как iPhone XR, метка теперь находится внутри красного представления, кажется, что она все еще следует за предыдущим автоперекрытием до высоты красного представления, которая ранее составляла 64 (в раскадровкеЯ использую iPhone 8), поэтому, когда пользовательская панель навигации обновляется до 88, когда она работает на iPhone XR, метка по-прежнему соответствует предыдущей высоте 64, а затем она будет находиться внутри красного представления
здесь - автоматическое расположение настраиваемой навигационной панели (красный вид)
и здесь - автоматическое расположениеметки
как решить эту проблему?