Горизонтальный 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

У меня такая же проблема сегодня. Через несколько часов продолжайте поиск, он решается путем изменения выбора ячейки по умолчанию по умолчанию. Надеюсь, что это поможет другим.