Комплекс UIView выкладывается по-другому, если у меня есть IBOutlet для ограничения - PullRequest
0 голосов
/ 17 декабря 2018

На снимках экрана ниже единственное изменение, которое я сделал, - это подключение IBOutlet для ограничения.Не подключен, экран раскладывается правильно.Подключен, экран выкладывается некорректно.Я не видел, чтобы это случилось раньше, и не знаю, что попытаться это исправить.Мне нужно иметь возможность изменять постоянное значение ограничения, чтобы изменить размер подпредставления в зависимости от наличия или отсутствия конкретного элемента.

IBOutlet объявлен как:

@IBOutlet weak var tabContentBottomConstraint: NSLayoutConstraint!

До сих пор я не реализовал никакого кода, который читает или изменяет это ограничение.Я добавил его в свой контроллер представления при подготовке к его использованию, но не пошел дальше, потому что когда я запускаю код после добавления IBOutlet, размеры представления неверны.Я добавлял и удалял несколько раз, всегда с одним и тем же результатом.

Вот информация отладчика о размерах представления перед подключением розетки:

enter image description here

А вот информация отладчика после подключения IBOutlet без каких-либо других изменений кода:

enter image description here

Разница в смещении yогромный и отталкивает взгляд от экрана.Как я сказал выше, ни один код не читает и не пишет в этот IBOutlet.

rolePageDrawerView - это item2 в ограничении, а item1 - это view.safeAreaLayoutGuide контроллера представления.rolePageDrawerView встроен на 3 уровня в дочерние представления view.safeAreaLayoutGuide.

1 Ответ

0 голосов
/ 17 декабря 2018

Я нашел способ обойти это странное поведение путем программного поиска ограничения с помощью следующего кода:

    guard let tabContentBottomConstraint = view.constraints.filter({ $0.secondItem! as! NSObject == rolePageTabContentView }).first else {
        fatalError("unable to find the constraint for drawer sizing")
    }
    self.tabContentBottomConstraint = tabContentBottomConstraint

Я оставил ограничение как слабую ссылку, даже если оно больше не вводится, так каксамо представление будет иметь ссылку на него, чтобы сохранить его живым.Это работает.

ОДНАКО, я оставляю вопрос открытым для лучшего решения.Вышеупомянутый поиск очень хрупкий, некоторые изменения макета в будущем.Было бы намного лучше, если бы фреймворк вводил ограничение, не нарушая компоновку.Все еще открыты для лучших решений.

...