2013-07-28 2 views
0

Я использую iOS 6 и Xcode 4.6, а с помощью Interface Builder я добавил в контроллер UIScrollView, который использует все доступное пространство. В этом UIScrollView я добавил несколько просмотров (a UIImageView, a UITextView и UITableView (я отключил прокрутку для UITextView и UITableView)).Содержимое scrollview меняет размер при прокрутке

В:

- (void) viewDidLayoutSubviews; 

метод я изменен все мои взгляды, увеличивая их высоту (в соответствии с их соответствующим содержанием). Затем я установил contentSize моего UIScrollView так, чтобы он соответствовал его содержимому (мои 3 представления).

Изменение размеров выполняется, и я могу видеть их в своем приложении, когда я его запускаю. Кроме того, прокрутка хорошая (contentSize является правильным, поскольку я могу прокручивать).

Однако у меня есть одна большая проблема: как только я прокручиваю, мои 3 представления изменяются до их первоначального размера (вместо того, чтобы сохранить размер, который я назначил им через свойство кадра).

Все мои представления добавлены с помощью Interface Builder в мою раскадровку.

Знаете ли вы, что я сделал не так? Почему мой контент UIScrollView's пересылает его размер при прокрутке?

Спасибо за вашу помощь

+0

Почему вы не используете метод viewDidLoad? Я использовал метод viewDidLoad, когда у меня были одни и те же задачи, и он работал хорошо для меня. –

+0

Да, как сказал Тимур, вам нужно сделать правильный код в методе viewDidLoad. потому что, когда прокручивается UIScrollView, он вызывает метод layoutSubviews и его subviews тоже. Это приведет к тому, что их подходы будут отправлены в исходное положение. –

+0

Я уже пытался изменить размеры просмотров в viewDidLoad, но он не работает (я открыл вопрос по этой проблеме, кстати http://stackoverflow.com/questions/17907178/uitextviews-frame-not-set-in-viewwillappear/ 17908561) (это потому, что мой контроллер загружается из события push, а представления добавляются из раскадровки). Поэтому мне нужно изменить размер в viewDidLayoutSubviews. Как мне продолжить? –

ответ

3

Вы Автокомпоновка включен в раскадровку. Когда вы прокручиваете прокрутку, автоматически выполняется макет и сбрасывает ваши рамки подкадров на основе ограничений в раскадровке.

Есть несколько способов исправить это. Один из способов - отключить автоматическую компоновку в вашем раскадровке. Другой способ - подключить выходы к ограничениям в вашем раскадровке и обновить ограничения (вместо установки фреймов), чтобы автоматическая компоновка помещала представления, в которых вы их хотите.

+0

Я обновил ограничения, и он работает. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^