Мне нужно сделать IBDesignable для создания файла пользовательской панели навигации, который будет регулировать высоту просмотра в зависимости от типа iPhone.если iPhone имеет высшую отметку, как iPhone X, XR, то ограничение высоты будет 88, в противном случае для iPhone 8, у которого нет высшей отметки, высота будет 64.
Мне нужно установить ограничение высоты, а не высота слоя.вот код, который я использую, но он не обновляет ограничение высоты
import UIKit
@IBDesignable
class CustomParentNavigationBarView: UIView {
override func awakeFromNib() {
super.awakeFromNib()
self.setHeight()
}
func setHeight() {
let deviceHasTopNotch = checkHasTopNotchOrNot()
var heightConstraint = NSLayoutConstraint()
if deviceHasTopNotch {
heightConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 88)
} else {
heightConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 64)
}
heightConstraint.isActive = true
self.addConstraint(heightConstraint)
}
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
}
}
результат должен быть примерно таким (красный вид), высота красного вида должна меняться в зависимости от типа iPhone, либо 88или 64
для начального значения, я устанавливаю автоматическое расположение представления в раскадровке так: