Xcode 13 iOS 15 Программные ограничения Obj-C переводят авторегулирующую маску в ограничения

#ios #objective-c #constraints

#iOS #цель-c #ограничения

Вопрос:

Я использую 100% программные ограничения в своем интерфейсном коде. Обновлен до Xcode 13 и iOS 15. Получил множество НОВЫХ предупреждений об ограничениях, в которых говорится, что системе пришлось нарушить некоторые ограничения, чтобы соответствовать другим. Я не видел таких предупреждений в течение нескольких лет и за все это время не касался своего кода ограничений. Тем не менее тщательное тестирование показывает, что мой код продолжает работать правильно. Как дела?

Ответ №1:

Ответ: Я был немного бесцеремонен с выбором времени, когда iOS фактически рассчитала ограниченные размеры. Я поместил все свои объявления программного интерфейса в один метод. В основе этого метода у меня уже давно был код, который выходил за рамки макета интерфейса, в предварительные работы NavCon. Среди этих деклараций NavCon у меня были такие строки, как:

self.view_D0_Tutorial.кадр = self.view_CenterPane_D0_Tutorial.кадр;

В то время, когда я писал и отлаживал эти строки, я отметил, что, используя отладчик, чтобы спросить, каковы данные о местоположении, все, что я когда-либо получал, было CRect (0,0,0,0), но код каким-то образом поступил правильно.

Ну, в ходе обновления iOS, по-видимому, изменила то, как они это делают. В ответ мне пришлось сделать две вещи.

(1) переместил весь предварительный код NavCon в новый отдельный метод и вызвал его с параметром performSelector и задержкой 0.

(2) изменил простое назначение кадра на более ограниченное назначение:

self.view_D0_Tutorial.frame = CGRectMake(0, 0, self.view_CenterPane_D0_Tutorial.frame.размер.ширина, self.view_CenterPane_D0_Tutorial.frame.размер.высота);;

Из-за этой комбинации сообщения об ошибках исчезли, и мой код продолжает работать правильно!