NSLayoutConstraint, определенный в коде и нижнем Руководстве по компоновке, устарел в iOS 11 - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть viewController, содержащий ограничение, подобное этому:

self.subviewConstraint = NSLayoutConstraint(item: self.subviewConstraint,
                                                     attribute: .bottom,
                                                     relatedBy: .equal,
                                                     toItem: self.bottomLayoutGuide,
                                                     attribute: .bottom,
                                                     multiplier: 1,
                                                     constant: 0)

, и мне показывают это предупреждение:

bottomLayoutGuide устарел в iOS 11.0:Используйте view.safeAreaLayoutGuide.bottomAnchor вместо bottomLayoutGuide.topAnchor

Я только нахожу примеры для установки якорей вместо NSLayoutConstraint, как это, и я не полностью понимаю это предупреждение ...msgstr "использовать view.safeAreaLayoutGuide. bottomAnchor вместо bottomLayoutGuide. topAnchor "?Как этот нижний якорь safeAreaLayoutGuide совпадает с верхним якорем bottomLayoutGuide?Где я могу найти хорошее графическое объяснение этого?Как мне правильно переписать мое ограничение, чтобы сохранить его текущее поведение?

1 Ответ

0 голосов
/ 23 февраля 2019

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 документация )

...