(автоматическая разметка) размер контейнера, а подвиды - нет

У меня есть некоторые проблемы с использованием автоматических макетов с контейнерными представлениями (в обоих случаях: с шаблоном содержания представления, используемым из 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);
Другие вопросы по тегам