TopLayoutGuide и bottomLayoutGuide устарели , поскольку iOS 11 .
Вы можете обновить свой код с помощью этого,воспользовавшись новым NSLayoutAnchor :
self.subviewConstraint = self.subviewConstraint?.firstItem?.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
или вы можете использовать инициализатор NSLayoutConstraint , как в вашем вопросе:
self.subviewConstraint = NSLayoutConstraint(item: self.subviewConstraint?.firstItem as Any,
attribute: .bottom,
relatedBy: .equal,
toItem: view.safeAreaLayoutGuide,
attribute: .bottom,
multiplier: 1,
constant: 0)
Обратите внимание, что вместо этого я изменил ваш параметр self.subviewConstraint
на self.subviewConstraint.firstItem
в методе инициализации NSLayoutConstraint , потому что вы использовали NSLayoutConstraint в качестве элемента.Я полагаю, что это какая-то опечатка, которую вы сделали.
Здесь вы можете найти хорошее графическое объяснение нового поведения SafeArea в iOS 11 и выше: Безопасная область iOS - Medium.com
Кроме того, вы сказали «Я нахожу только примеры для установки якорей вместо NSLayoutConstraints» , но я хочу пояснить, чтоconstraint(equalTo:)
метод NSLayoutAnchor возвращает NSLayoutConstraint .( Apple NSLayoutAnchor документация )