Как установить ограничение высоты в файле IBDesignable? - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно сделать 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 enter image description here

для начального значения, я устанавливаю автоматическое расположение представления в раскадровке так:

enter image description here

1 Ответ

0 голосов
/ 16 октября 2018

Я вижу две проблемы:

  1. Вы не активируете ограничения.Добавьте эту строку heightConstraint.isActive = true

  2. Вы вызываете SetHeight несколько раз.Каждый раз добавляется ограничение.Это приведет к конфликтам ограничений и плохому поведению.Вместо этого просто создайте ограничение один раз и сохраните его как элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...