#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 может прокручивать более широкую область, но для обнаружения касаний в большем прямоугольнике вам следует изменить рамку представления прокрутки.