Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
#1

ScrollView не скроллится (хотя contentSize > frame) - Программирование iOS

08.01.2014, 18:48. Просмотров 1679. Ответов 17
Метки нет (Все метки)

Доброго всем дня!

Схожу понемножку с ума:
Есть scrollView. Аутлет проведен, "Scrolling enabled" включен, "User Interaction Enabled" включен, все subview даже упаковал в отдельный View и засунул его в скролл в качестве единственного элемента.
Во ViewDidLoad уже явно написал:
Objective-C
1
2
self.scrollView.scrollEnabled = YES;
        self.scrollView.contentSize = CGSizeMake(320, 1050);
ContentSize получается более чем в два раза больше фрейма скролла.

А он не скроллится вообще, хоть убейся((
Перечитал весь StackOverflow - никаких дополнительных советов нет..

Буду очень благодарен за какие-то идеи..
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 18:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ScrollView не скроллится (хотя contentSize > frame) (Программирование iOS):

Не получается задать contentSize - Программирование iOS
Доброго времени суток. Столкнулся с проблемой, когда в UITextView необходимо сделать отступ текста. Делаю это с помощью ; Соответственно...

Как программно добавить Frame в другой существующий на форме frame? - VBA
Делаю это так: На форме лежит Frame1. на инициализации формы.... Dim mFrame As Object

Передача информации из одного Frame в другой Frame - C# WPF
Здравствуйте! У меня следующий вопрос: На окне есть первый Frame в котором несколько страниц. На одной из страниц первого Frame, а...

Обновление данных на Frame из другого Frame - Java
Помогите реализовать: есть MainFrame и SettingsFrame. Нужно что бы при нажатии Button на SettingsFrame обновилась (перерисовалась) таблица...

In a frame because it set 'X-Frame-Options' to 'SAMEORIGIN - HTML, CSS
http://rghost.ru/7hxl2VcQS.view Как ето исправить?

Frame, Chrome, Blocked a frame with origin "null" - JavaScript
Здавствуйте, имеется следующий файл: <html> <head </head> <frameset cols="20%, *" > <frame src=panel.html scrolling=yes...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
08.01.2014, 19:53 #2
Подозреваю, что используется auto layout. Если да, то надо констрейном указать расстояние от самого нижнего окна в scroll view (в вашем случае вот этого "даже упаковал в отдельный View") до нижней части самого scroll view. При использовании auto layout contentSize рассчитывается из констрейнов.
1
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
08.01.2014, 20:07  [ТС] #3
Спасибо большое! Буду в ближайшее время читать детальнее про UIScrollView, чтобы понять его кухню..
Добавил такой констрейнт, потом сделал "Add missing constraints", чтобы автоматически добавились недостающие, и - ура, скролл завертелся))

Правда, до конца не докручивается - заметил, что мой contentsize почему-то сбрасывается в исходное значение, как только я начинаю взаимодействовать со скроллом..
Пока тема активна - может у вас есть мнение и по поводу этой новой проблемы?
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
08.01.2014, 21:03 #4
self.scrollView.scrollEnabled = YES;
self.scrollView.contentSize = CGSizeMake(320, 1050);
не из за этого случайно?
0
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
08.01.2014, 21:10  [ТС] #5
Цитата Сообщение от mobidevelop Посмотреть сообщение
self.scrollView.scrollEnabled = YES;
self.scrollView.contentSize = CGSizeMake(320, 1050);
не из за этого случайно?
Чувствую, я чего-то не понимаю..((
Сейчас разместил на своем scrollView->View-> только один элемент - кнопку.

Высота скролла (скролл по вертикали выполняется) == 422;
Высота View внутри него == 800;
Кнопка внутри View находится по y-смещению == 700.
И в коде я ставлю contentSize == 1050.

Что же из этого списка может быть некорректным?
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
08.01.2014, 21:25 #6
Все констрейны, которые нужны:
Leading, trailing, top space и bottom space от View, которая лежит в скролл-вью, до самого скролл вью
Остальное убить и не пользовать Add missing constraints пока не въедете в них. Я въезжал пару месяцев )))) Но в 5-м икскоде они значительно удобнее.
0
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
08.01.2014, 21:42  [ТС] #7
Цитата Сообщение от mobidevelop Посмотреть сообщение
Все констрейны, которые нужны:
Leading, trailing, top space и bottom space от View, которая лежит в скролл-вью, до самого скролл вью
Остальное убить и не пользовать Add missing constraints пока не въедете в них. Я въезжал пару месяцев )))) Но в 5-м икскоде они значительно удобнее.
Спасибо, сделал так, как вы сказали. Теперь ошибка "scrollview has ambiguous scrollable content".
Нагуглил статью, вроде как, на схожую тему:
http://www.suchanowski.com/2013/11/a...-uiscrollview/

Сейчас буду читать.

Что вы скажете по поводу этой ошибки? Она исчезает при указании, с использованием констрейтсов ширины-высоты скроллу, или view, которая лежит внутри него, но тогда проблема со скроллом остается
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
08.01.2014, 21:49 #8
Скажу, что скорее всего перед добавлением новых констрейны надо было убить старые.
А на самом деле, это уже отладка. Путь я показал, дальше самостоятельно
1
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
08.01.2014, 22:01  [ТС] #9
Да, старые убил.
Спасибо большое за помощь! Как только разберусь - напишу свою последовательность действий.
0
takaTa
5 / 5 / 1
Регистрация: 14.01.2014
Сообщений: 7
14.01.2014, 23:27 #10
Сталкивался с такой проблемой, указывал контет во viewDidLoad, потом где-то наткнулся на статью, где говорилось о том, что лучше этот делать после того как загрузится view, перенес метод setContentSize во viewWillAppear и все заработало на ура.
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
15.01.2014, 01:13 #11
ага. Пока пользователь айфон в лэндскейп не перевернул. Ну, а если совсем точно - пока родительской вьюхе не понадобилось layout обновить. Неправильная статья. Или неправильно понята.
1
takaTa
5 / 5 / 1
Регистрация: 14.01.2014
Сообщений: 7
15.01.2014, 13:22 #12
Цитата Сообщение от mobidevelop Посмотреть сообщение
ага. Пока пользователь айфон в лэндскейп не перевернул. Ну, а если совсем точно - пока родительской вьюхе не понадобилось layout обновить. Неправильная статья. Или неправильно понята.
Спасибо за более точное разъяснение. Благодаря Вам нашел баг)
0
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
15.01.2014, 19:35  [ТС] #13
Накидали мне сразу после постинга этой темы других задач, и только сегодня вернулся опять к своей проблеме.
За пару дней пришла в голову интересная идея, которую я попробовал реализовать - и, вуаля, - все стало красиво, просто и без каких-то проблем.

Удивляет, правда, то, что сделал все иначе, чем рекомендовали мне добрые люди в этой теме, и чем было написано на разных стековерфлов'ах. А сделал я следующее:

Создал xib-файл, в нем View "свободной" формы, который растянул на высоту контента, который я планировал вставить в свой скролл.
Насовал в этот View кучу компонентов, и потом просто загрузил в свой скролл содержимое этого xib'а, как subView:
Objective-C
1
2
3
4
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"AddMoneyScroll_P" owner:self options:nil];
UIView *mainView = [subviewArray objectAtIndex:0];
[self.scrollView addSubview:mainView];
self.scrollView.contentSize = mainView.frame.size;
Ни фокусов с констрейтсами (хотя, конечно, надо в них углубиться в самое ближайшее время), ни каких-то других тонкостей - вроде все просто, и работает.
Вижу в этом решении один большой плюс - мне очень удобно в отдельном xib'e рисовать содержимое скролла.

Но неужели все так просто?)) Подскажите, может в моем решении есть какой-то потенциальный скрытый косяк?

Добавлено через 1 час 27 минут
Уже понял абсурдность своего решения))
Не прокатила внезапная "гениальная идея"
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
15.01.2014, 21:14 #14
А в чем беда-то? Не сказать, чтобы прямо безупречный вариант, но по крайней мере вполне работоспособный. Если в layoutSubviews добавить "self.scrollView.contentSize = mainView.frame.size;", еще и безбажный.
Интересно же
0
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
15.01.2014, 21:52  [ТС] #15
Цитата Сообщение от mobidevelop Посмотреть сообщение
А в чем беда-то? Не сказать, чтобы прямо безупречный вариант, но по крайней мере вполне работоспособный. Если в layoutSubviews добавить "self.scrollView.contentSize = mainView.frame.size;", еще и безбажный.
Интересно же
(сразу скажу - пока оставил так, но еще думаю).
Дело в том, что у меня в mainView лежит штук 15 разных полей ввода, из которых мне надо забирать инфу.
Чтобы получить к ним доступ, я каждому назначил Tag = 1,2,3..., в контроллере, который содержит скролл, объявил 15 UITextField, и после приведенного выше мною кода я прохожусь по всем subView этого mainView, проверяю тег, и присваиваю нужному UITextField нужный subView.
После этого уже работаю с ними без проблем.

Я не очень давно занимаюсь iOS разработкой, может я выбрал слишком сложный подход, и поэтому он меня смутил?

Т.е. в принципе, все работает, но как-то показалось мне похожим на извращение))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2014, 21:52
Привет! Вот еще темы с ответами:

Не могу вывести в фрейм (<frame src='search.html' scrolling='auto'> <frame name='main' src='result.html' scrolling='auto'>) - JavaScript
Помогите решить такую проблему. У меня скрипт на JS обращается из одного фрейма (в котором форма запроса, search.html) к другому (main, в...

ScrollView - Программирование Android
Привет) Работаю со ScrollView у меня есть например 5 изображений, грубо говоря каждое отвечает за свой функционал, как при прокрутке мне...

ScrollView - Программирование Android
Добрый день! Работаю с обычным ScrollView. Получаю что-то типа: Подскажите пожалуйста, можно ли настроить ScrollView, чтобы получить...

Конец ScrollView - Программирование Android
Здравствуйте, уважаемые форумчане? Есть ли в ScrollView метод, который определяет, что ScrollView сейчас дошел до конца, или метод,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.01.2014, 21:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru