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

ScrollView не скроллится (хотя contentSize > frame)

08.01.2014, 18:48. Просмотров 2031. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

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 / 0
Регистрация: 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 / 0
Регистрация: 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

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

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

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


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

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

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