2015-10-21 4 views
1

Создаю вид (ширина: 600) с помощью xib и поместил в него UIScrollView (маржа как влево, так и вправо 20). Я хочу получить ширину scrollView в коде, но вместо этого получаю 560. Я новичок в AutoLayout и очень хочу помочь, спасибо большое.Как я могу получить реальный кадр из Autolayout

+0

Где вы пытаетесь получить ширину? добавьте код. Например, если вы пытаетесь получить ширину сразу после загрузки nib, она даст вам ширину, основанную на размере в xib (600 - 40). Вам нужно добавить представление, добавить ограничения и сделать «layoutIfNeeed» в представлении контейнера, чтобы он обновил макет по вашим ограничениям. Просто добавьте код. – oren

ответ

0

Это все вопрос , когда вы получаете ширину прокрутки в коде. viewDidLoad слишком рано. viewDidAppear было бы в порядке. Но самое лучшее время - viewDidLayoutSubviews, потому что именно тогда была выполнена макет и была установлена ​​ширина прокрутки.

+0

Однако вы также должны спросить себя, почему вы хотите эту информацию. Вы используете автоматическую компоновку, поэтому теоретически все должно быть сделано с ограничениями по сравнению с другими вещами. Вам не нужно знать числовое значение ширины прокрутки; тот факт, что вы просите эту информацию, - «плохой запах». – matt

+0

Я хочу добавить несколько кнопок в вид прокрутки, но ширина кнопки основана на тексте в нем, поэтому я просто добавляю кнопки с кодом, а не xib, поэтому мне очень нужна ширина прокрутки. – wamaker

+0

Я полностью с вы, но читайте, что я сказал. Ширина кнопки может быть основана на тексте внутри нее или может быть основана на ширине своего супервизора или может быть основана на чем-то другом, и вы можете организовать все это с ограничениями автоопределения_ (в nib). Вы сами сказали, что вы новичок в автозапуске, поэтому слушайте кого-то, кто не является новым: _learn_ autolayout и _use_ it. – matt

0

Вам необходимо загрузить свой XIB и позвонить по телефону layoutIfNeeded. На следующем цикле runloop вы сможете увидеть фактический размер кадра.