Відповідь така [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. Це, мабуть, неправильний шлях, оскільки він також фактично вимагає від вас визначити, яке саме обмеження визначало розмір меж, коли на це питання не гарантується проста відповідь. Кінцеве значення меж може бути рішенням дуже складної системи з декількома обмеженнями,