Горизонтальный UIScrollView внутри пользовательского UITableViewCell - с использованием раскадровки IB - не прокрутка
Основная цель - прокручивать содержимое каждой строки по горизонтали.
Я пытаюсь сделать это с помощью X Code 5 и с помощью StoryBoard.
Проблема кажется простой, но после многих часов поиска я ничего не получил, кроме одной проблемы, которая несколько схожа, но с использованием программного подхода см. здесь.
В IB у меня есть структура, как показано ниже.
![View structure]()
- Размер содержимого прокрутки в параметрах {5000, 500} устанавливается как в IB, так и в коде
- Кадр прокрутки - {0,0} {320,44}
- Рамка меток установлена на {20,0} {500,44}
Я также предоставил проект в репозитории github. В этом примере также есть "нормальное" scrollview, работающее вне uitableviewcell.
Пожалуйста, скажите, что я пропустил что-то очень основное.
Ответы
Ответ 1
Автозапуск активирован (и это хорошо) в вашем раскадровке.
Прокручиваемый размер UIScrollView вычисляется на основе ограничений его подзонов.
Итак, вам нужно добавить "верхнее, нижнее, ведущее, конечное пространство для просмотра" в UIImageView внутри UIScrollView. Они могут быть установлены на 0.
Теперь, если вы не добавите ограничения в UIImageView, тогда будет использован его внутренний размерContentSize.
Ваши ограничения должны выглядеть так:
![autolayout constraints]()
Обратите внимание, что вам также не хватало ограничений в представлении содержимого вашей ячейки.
Когда вы закончите с ограничениями, удалите все вызовы setContentSize: из вашего кода.
Ответ 2
Другой альтернативой этому является использование UICollectionView внутри пользовательского UITableViewCell
Ответ 3
У меня была та же проблема, и выяснилось, что удаление содержимого содержимого прокрутки и добавление его снова работает:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.label removeFromSuperview];
[self.scrollView addSubview:self.label];
self.scrollView.contentSize = self.label.frame.size;
}
Это не самое элегантное решение, но оно работает для меня.
Ответ 4
Благодаря новому режиму автоотключения, iOS 7, похоже, сломал много приложений iOS 6 и более ранних версий, которые используют UIScrollView. Недавно я опубликовал аналогичный вопрос [теперь приостановлено модераторами - так что вы не сможете его увидеть], где пользователь Lv.BeLeCk нашел успех, используя:
self.automaticallyAdjustsScrollViewInsets = NO;
в контроллере просмотра, содержащем scrollview. Просто поставьте его после создания экземпляра прокрутки. Посмотрите, работает ли это, и если да, пожалуйста, воздержитесь от его вклада.
Я думаю, что основная причина в том, что при создании экземпляра UIScrollViews теперь обновляют свои размеры на основе их текущего содержимого, в отличие от того, где они просто оставили их только Ад.
Почему Apple хотела с этим справиться, чего я не знаю. Я все еще жду выравнивания сверху и снизу для многострочных меток!
Ответ 5
Убедитесь, что setContentSize
вызывается в viewDidLayoutSubviews
и scrollViewDidEndZooming:withView:atScale:
. В iOS6, если у вас не было кода в этих методах, поведение по умолчанию работало нормально, в iOS7 с новой системой компоновки они необходимы. Его можно вызвать более одного раза для настройки, просто позвоните setContentSize
.
Ответ 6
Я не могу получить доступ к вашему Storyboard
, с моим xCode 4.
Прежде всего, вы должны соединить UITableView
с вашим ViewController
. UITableViewCell
находится внутри вашего UITableView
. Вот почему вы должны попытаться изменить настройки своего UITableView
. После подключения вы должны попытаться изменить contentinset
вашего UITableView
следующим образом:
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 2500, 2500)];
Если это не работает, вы также можете попытаться изменить размер содержимого вашего TableView. Возможно, вам также придется изменить размер вашего UIView
, прежде чем он будет работать.
Ответ 7
Я фиксирую ситуацию через IB.
Я должен иметь одно и то же значение внутри раздела "Значение идентификатора - Атрибуты пользовательских атрибутов времени выполнения" с ключом "frame - Rect - CGRectValue", равным "Инспектору размера - Показать значения".
Надеюсь, это поможет вам.
Ответ 8
У меня такая же проблема сегодня.
Через несколько часов продолжайте поиск, он решается путем изменения выбора ячейки по умолчанию по умолчанию.
Надеюсь, что это поможет другим.