UIScrollView не будет прокручиваться, даже после установки размера контента

Мой UIScrollView представляет собой горизонтальное представление размером 4500 пикселей, которое пользователю необходимо прокручивать по горизонтали для просмотра содержимого.

Я установил его следующим образом:

- (void)viewDidLoad { [super viewDidLoad]; sview.frame = CGRectMake(0, 0, 568, 320); sview.contentSize = CGSizeMake(4500, 320); [sview setScrollEnabled:YES]; } 

Однако прокрутка не делает ничего. Есть что-то очевидное, что я пропустил? Я пробовал буквально каждый учебник в Интернете.

У меня такая же проблема. Я сделал следующие изменения, и scrollView начал прокручивать для меня:

  1. Выберите, чтобы проверить свойство «Bounce Horizontally» для UIScrollView в xib.
  2. Переместите код следующего кода в viewDidAppear вместо viewDidLoad:
 -(void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; sview.frame = CGRectMake(0, 0, 568, 320); sview.contentSize = CGSizeMake(4500, 320); [sview setScrollEnabled:YES]; } 

Я думаю, это должно помочь вам.

Я объяснил это здесь , но ответов на эту проблему так много, что предлагает отключить автоматическую компоновку. Это устраняет проблему, но это не совсем правильное решение. Вот мой ответ:


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

UIScrollView разному работает с другими видами в Auto Layout. Вот заметка о выпуске Apple в Auto Layout, я скопировал интересный бит:

Вот несколько примечаний относительно поддержки Auto Layout для UIScrollView:

  • В общем случае Auto Layout рассматривает верхние, левые, нижние и правые края представления как видимые края. То есть, если вы привязываете представление к левому краю своего супервизора, вы действительно привязываете его к минимальной x-значению границ супервизора. Изменение начального значения границ надзора не меняет положение представления.
  • Класс UIScrollView прокручивает его содержимое, изменяя начало его границ. Чтобы сделать эту работу с помощью автоматического макета, верхний, левый, нижний и правый края в представлении прокрутки теперь означают края его содержимого.
  • Ограничения на представления в представлении прокрутки должны приводить к заполнению размера, которое затем интерпретируется как размер содержимого прокрутки. (Это не следует путать с методом intrinsicContentSize, используемым для автоматической компоновки.) Чтобы размер кадра представления прокрутки с помощью Auto Layout, ограничения должны быть либо явными относительно ширины и высоты прокрутки, либо края прокрутки должны быть привязан к представлениям вне своего поддерева.
  • Обратите внимание, что вы можете сделать представление подпрограммы вида прокрутки, чтобы плавать (не прокручивать) по другому прокручиваемому контенту, создавая ограничения между представлением и представлением вне поддерева вида прокрутки, например надвью просмотра прокрутки.

Затем Apple продолжает демонстрировать пример правильного использования UIScrollView с автоматической компоновкой.

Как правило, одним из самых простых исправлений является создание ограничения между элементом в нижней части UIScrollView. Таким образом, в элементе, который вы хотите находиться в нижней части UIScrollView, создайте это нижнее пространство:

введите описание изображения здесь

Еще раз, если вы не хотите использовать автоматический макет, выключите его. Затем вы можете установить contentSize обычным способом. Но вы должны понимать, что это преднамеренное поведение Auto Layout.

Прежде всего, вы должны добавить некоторый контент в UIScrollSiew в качестве подсмотра для прокрутки, без содержимого в UIScrollView, как вы можете прокручивать ?. Вот что я сделал, просто добавьте UIImageView в UIScrollView в качестве подвидного размера, такого же, как размер UIScrollView …

В методе viewDidLoad попробуйте следующий код.

 -(void)viewDidLoad { UIScrollView *scroll=[[UIScrollView alloc] init]; scroll.frame=CGRectMake(0, 0, 320, 460); UIImageView *imageView=[[UIImageView alloc] init]; imageView.frame=CGRectMake(0, 0, 320,460); imageView.image=[UIImage imageNamed:@"chiranjeevi.jpeg"]; scroll.contentSize = CGSizeMake(4500, 460); [scroll setScrollEnabled:YES]; [scroll addSubview:imageView]; [self.view addSubview:scroll]; } 

Я тестировал этот код, он хорошо работает. Я надеюсь, что этот код будет вам полезен ..

Я предполагаю, что вы добавляете UISrollingView в свой Xib-файл. Это будет работать для вас.

 sview.delegate = self; sview.backgroundColor=[UIColor clearColor]; [sview setCanCancelContentTouches:NO]; sview.indicatorStyle = UIScrollViewIndicatorStyleWhite; sview.clipsToBounds = YES; sview.scrollEnabled = YES; sview.contentSize = CGSizeMake(320,570); CGPoint topOffset = CGPointMake(0,0); [sview setContentOffset:topOffset animated:YES]; 

Кроме того, убедитесь, что вы получили соединение IBOutlet в вашем файле Xib.

Я также столкнулся с той же проблемой. Я добавил прокрутку в xib.I также добавил некоторые подзаголовки в это представление прокрутки. Прокрутка будет прекращать прокрутку после того, как я добавлю subviews. Решение этой проблемы было в xib для представления в инспекторе файлов. Проверено использование Autolayout. Я снял флажок, и прокрутка прокручивалась после добавления подзонов.

Решение заключалось в том, чтобы установить флажок Использовать автозапуск в инспекторе файлов в xib.

  • Анимация внутри UIScrollView
  • Как изменить текущую страницу для учебника UIScrollView от Ray Wenderlich?
  • Я хочу иметь возможность прокручивать UITableViewCell влево и вправо с помощью раскадровки. Разве это невозможно?
  • iOS 7 масштабирование не работает в ScrollView с AutoLayout, но работает в iOS8 / 9
  • Как сбросить мою позицию UIScrollView после возвращения из модального перехода?
  • как увеличить или уменьшить масштаб в uipageviewcontroller?
  • как проверить, когда UITableView выполняется прокрутка
  • UIPanGestureRecognizer.maximumNumberOfTouches не соблюдается в вложенных представлениях прокрутки?
  • Помещение UIScrollview в viewcontroller (раскадровка)
  • Недопустимое исключение параметра, созданное _UIQueuingScrollView
  • Как отслеживать смещение uiscrollview быстрее, чем в прокрутке scrollviewdid?
  • Давайте будем гением компьютера.