Проблема с размером содержимого UIScrollView — из-за примера кода

#iphone #objective-c #ios #ios4 #uiscrollview

#iPhone #objective-c #iOS #ios4 #uiscrollview

Вопрос:

В моем представлении я создаю scrollview шириной 320 и высотой 70.

Отвечая на нажатие пользователем кнопки, я разворачиваю scrollview, так что его размер составляет 380 (h) x 320 (w).

Код для этого показан ниже:

 CGRect scrollviewFrame = CGRectMake(0, 30, 320, 380);
[scrollView setFrame:scrollviewFrame];
[self layoutScrollImages:YES];
CGSize srect =  CGSizeMake([scrollView bounds].size.width, (kNumImages * (kScrollObjHeight   10)));
[scrollView setContentSize:srect];
  

Константы, упомянутые в приведенном выше фрагменте, определяются как:

 const CGFloat kScrollObjHeight  = 80;
const NSUInteger kNumImages     = 100;
  

Когда я отлаживаю этот проект, я вижу, что размер srect составляет 320 (w) x 8000 (h); однако моя проблема заключается в том, что область прокрутки (где пользователь может фактически коснуться для прокрутки scrollview) остается такой же, как и при первоначальном размере.

Я, очевидно, чего-то не хватает, кто-нибудь знает, что это?

я создал пример проекта, чтобы проиллюстрировать проблему, с которой я столкнулся, он доступен здесь: http://dl.dropbox.com/u/9930498/ScrollViewTest.zip

Ответ №1:

Проблема в вашем примере в том, что у вас очень странная структура для загрузки ваших представлений. Таким образом, представление, которое вы добавляете к DetailScrollView экземпляру, является корневым представлением DetailScrollView.xib, а не самим scrollview, что, я полагаю, является тем, что вы ожидали.

Самый быстрый способ решить вашу проблему — настроить корневой вид в DetailScrollView.xib для автоматического изменения ширины и высоты.

Ответ №2:

Пользовательский интерфейс не может реагировать на касания, которые находятся за пределами его супервизора. В вашем примере кажется, что вы расширяете вид прокрутки, но родительский вид прокрутки по-прежнему имеет высоту всего 100 единиц.

Ответ №3:

Вы должны представить ScrollView как окно, где под окном я подразумеваю рамку ScrollView, которая также является координатами, по которым ScrollView обнаруживает ваши касания. Устанавливая contentView как 320 (w) x 8000 (h), вы изменяете только содержимое вида прокрутки, который представляет собой полную область за этим окном.

Расширяя представление содержимого, ScrollView может прокручивать более широкую область, но для обнаружения касаний в большем прямоугольнике вам следует изменить рамку представления прокрутки.