Создаю вид (ширина: 600) с помощью xib и поместил в него UIScrollView (маржа как влево, так и вправо 20). Я хочу получить ширину scrollView в коде, но вместо этого получаю 560. Я новичок в AutoLayout и очень хочу помочь, спасибо большое.Как я могу получить реальный кадр из Autolayout
ответ
Это все вопрос , когда вы получаете ширину прокрутки в коде. viewDidLoad
слишком рано. viewDidAppear
было бы в порядке. Но самое лучшее время - viewDidLayoutSubviews
, потому что именно тогда была выполнена макет и была установлена ширина прокрутки.
Однако вы также должны спросить себя, почему вы хотите эту информацию. Вы используете автоматическую компоновку, поэтому теоретически все должно быть сделано с ограничениями по сравнению с другими вещами. Вам не нужно знать числовое значение ширины прокрутки; тот факт, что вы просите эту информацию, - «плохой запах». – matt
Я хочу добавить несколько кнопок в вид прокрутки, но ширина кнопки основана на тексте в нем, поэтому я просто добавляю кнопки с кодом, а не xib, поэтому мне очень нужна ширина прокрутки. – wamaker
Я полностью с вы, но читайте, что я сказал. Ширина кнопки может быть основана на тексте внутри нее или может быть основана на ширине своего супервизора или может быть основана на чем-то другом, и вы можете организовать все это с ограничениями автоопределения_ (в nib). Вы сами сказали, что вы новичок в автозапуске, поэтому слушайте кого-то, кто не является новым: _learn_ autolayout и _use_ it. – matt
Вам необходимо загрузить свой XIB и позвонить по телефону layoutIfNeeded
. На следующем цикле runloop вы сможете увидеть фактический размер кадра.
Где вы пытаетесь получить ширину? добавьте код. Например, если вы пытаетесь получить ширину сразу после загрузки nib, она даст вам ширину, основанную на размере в xib (600 - 40). Вам нужно добавить представление, добавить ограничения и сделать «layoutIfNeeed» в представлении контейнера, чтобы он обновил макет по вашим ограничениям. Просто добавьте код. – oren