(автоматическая разметка) размер контейнера, а подвиды - нет
У меня есть некоторые проблемы с использованием автоматических макетов с контейнерными представлениями (в обоих случаях: с шаблоном содержания представления, используемым из ios5 и простым контейнерным представлением).
У меня есть своего рода специальный контроллер Master Detail, я могу изменить размер левого контейнера после некоторых действий пользователя, и соотнесение правого контроллера должно изменить размеры в соответствии с новыми пробелами, оставшимися неиспользованными.
Для "детального" контроллера я установил контроллер с Xib, и, используя автоматическую компоновку, у меня есть некоторое представление о нем. в визуальном формате они будут примерно такими:
- V: | [headerView] [contentView] [footerView] |
- H: | [headerVieW]
- H: | [contentView]
- H: | [footerView]
это только представление, чтобы понять проблему.
Если я пытаюсь изменить размер детального кадра controller.view, то он расширяется правильно, а подпредставления - нет.
в методе - (void)viewDidLayoutSubviews этого контроллера я попытался установить кадры вручную, и это работает, но я полагаю, что это неправильно, так как я использую автоматическую разметку!
Эта проблема снова возникает, если у меня есть общее представление и подпредставление, содержащее представления изображений, если я определяю это представление из xib с помощью autolayout, если я изменяю среду выполнения, изменяю фрейм после того, как представление настроено, подвиды (изображения для edample) не изменяют размеры,
Кто-нибудь может мне помочь?
Спасибо!
2 ответа
Основываясь на вашем описании ограничений, я думаю, что описанное поведение - именно то, что вы сказали ему делать.
Обратите внимание, что ваши горизонтальные ограничения требуют, чтобы представления были заподлицо с левой стороной супервизора. Они, однако, ничего не говорят о том, как они должны относиться к правой стороне суперпредставления. Таким образом, изменение ширины суперпредставления ничего не делает; они просто остаются на одном уровне с левым размером и сохраняют любую ширину, которую обеспечивают их внутренние ограничения.
Если вы хотите изменить размеры представлений с их суперпредставлением, то вам нужно добавить ограничения на задней стороне. В частности, ваши ограничения могут выглядеть так:
H:|[headerView]|
H:|[contentView]|
H:|[footerView]|
Или, может быть, вы хотите, чтобы они сокращались только в том случае, если суперпредставление слишком узкое, а в остальном не растягивалось до конца. Тогда вы можете сделать это:
H:|[headerView]-(>=10)-|
H:|[contentView]-(>=10)-|
H:|[footerView]-(>=10)-|
В любом случае, кажется, что корень вашей проблемы в том, что представления никак не связаны с правым краем суперпредставления, и это никак не связано с его шириной. Добавление этих ограничений должно решить проблему.
Если ваши взгляды в визуальном формате находятся между "|" (это твой случай)
CGSize fittingSize = [container systemLayoutSizeFittingSize: UILayoutFittingCompressedSize];
container.frame = CGRectMake(0, 150, 320, fittingSize.height);