Ответ есть [view layoutIfNeeded]
.
Вот почему:
Вы по-прежнему получаете текущую ширину и высоту представления, проверяя view.bounds.size.width
и view.bounds.size.height
(или фрейм, что эквивалентно, если вы не играете с view.transform
).
Если вам нужна ширина и высота, подразумеваемые вашими существующими ограничениями, ответ - не проверять ограничения вручную, так как это потребует от вас повторной реализации всей логики решения ограничений системы автоматической компоновки, чтобы интерпретировать эти ограничения. ограничения. Вместо этого вам нужно просто попросить автоматический макет обновить этот макет , чтобы он разрешил ограничения и обновил значение view.bounds с правильным решением, а затем вы проверите view.bounds.
Как вы попросите автоматический макет обновить макет? Вызовите, [view setNeedsLayout]
если хотите, чтобы автоматическая компоновка обновляла компоновку при следующем повороте цикла выполнения.
Однако, если вы хотите, чтобы макет обновлялся немедленно, чтобы вы могли сразу же получить доступ к новому значению границ позже в вашей текущей функции или в другой момент до поворота цикла выполнения, вам необходимо вызвать [view setNeedsLayout]
и [view layoutIfNeeded]
.
Вы задали второй вопрос: «как я могу изменить ограничение высоты / ширины, если у меня нет ссылки на него напрямую?».
Если вы создаете ограничение в IB, лучшим решением будет создание IBOutlet в вашем контроллере представления или в вашем представлении, чтобы у вас была прямая ссылка на него. Если вы создали ограничение в коде, вам следует удерживать ссылку во внутреннем слабом свойстве в то время, когда вы его создавали. Если кто-то другой создал ограничение, вам необходимо найти его, изучив свойство view.constraints в представлении и, возможно, всю иерархию представления, и реализовав логику, которая находит критически важный NSLayoutConstraint. Это, вероятно, неправильный путь, поскольку он также фактически требует от вас определения того, какое конкретное ограничение определяет размер границ, когда нет гарантии, что на этот вопрос будет простой ответ. Окончательное значение границ может быть решением очень сложной системы множественных ограничений,