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

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

08.01.2014, 18:48. Просмотров 1943. Ответов 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 - никаких дополнительных советов нет..

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

Websocket frame: Как правильно построить frame byte array?
Доброго дня. Пытаюсь написать свою имплементацию Websocket, но застрял на...

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

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

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

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

17
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
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
15.01.2014, 22:01 #16
Цитата Сообщение от someMan Посмотреть сообщение
Т.е. в принципе, все работает, но как-то показалось мне похожим на извращение
Ну да, есть что-то такое
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
16.01.2014, 12:21 #17
Чтобы получить к ним доступ, я каждому назначил Tag = 1,2,3..., в контроллере, который содержит скролл, объявил 15 UITextField,
Используйте NSArray и IBOutletCollection. И в таких случаях не нужно "пробегать по subview", это плохой тон.

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"AddMoneyScroll_P" owner:self options:nil];
UIView *mainView = [subviewArray objectAtIndex:0];
Используйте методы NSArray:
Objective-C
1
2
- lastObject;
- firstObject;
1
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
16.01.2014, 14:37  [ТС] #18
Цитата Сообщение от zulkis Посмотреть сообщение
Используйте NSArray и IBOutletCollection. И в таких случаях не нужно "пробегать по subview", это плохой тон.


Используйте методы NSArray:
Objective-C
1
2
- lastObject;
- firstObject;
Спасибо за дополнение!
0
16.01.2014, 14:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2014, 14:37
Привет! Вот еще темы с решениями:

Не скроллится страница
Добрый вечер! У меня проблема с сайтом. Во всех браузерах страница без проблем...

Frame, Chrome, Blocked a frame with origin "null"
Здавствуйте, имеется следующий файл: <html> <head </head> <frameset...

Форма при открытии самостоятельно скроллится вверх (Access 2013)
Есть форма высотой больше размера экрана. На ней вверху несколько полей без...

Фиксированное левое меню, когда сужается по высоте то начинает скроллится
Подскажите как реализовать такое левое меню как тут ? Оно при уменьшении...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

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