iOS - UIScrollView не работает (он не прокручивается вообще - изображение остается фиксированным) - PullRequest
23 голосов
/ 14 марта 2012

Я хочу отобразить изображение (ширина: 320 пикселей, высота: 1250 пикселей) в виде изображения.

Когда я компилирую приложение, у меня вообще нет прокрутки. Вид остается неизменным.

Что я сделал:

  1. Добавлено UIScrollView через Интерфейсный Разработчик на мой взгляд.
  2. Добавлен UIImageView через Interface Builder на мой взгляд.
  3. Проверено, что UIImageView ниже UIScrollView в Интерфейсном Разработчике.
  4. Установите размер UIScrollView с помощью ViewDidLoad.

Как мне это сделать?

Код:

- (void)viewDidLoad
{
    [super viewDidLoad];
    scrollView.contentSize = CGSizeMake(320, 1250);
}

Скриншоты:

ImageView

Enter image description here

ScrollView

Enter image description here Enter image description here

Enter image description here

Ответы [ 17 ]

27 голосов
/ 14 марта 2012

Я только что выполнил ту же задачу .. Попробуйте это .....

scrollView.delegate = self;
scrollView.scrollEnabled = YES;

int scrollWidth = 120;
scrollView.contentSize = CGSizeMake(scrollWidth,80);     


int xOffset = 0;
imageView.image = [UIImage imageNamed:[imagesName objectAtIndex:0]];

for(int index=0; index < [imagesName count]; index++)
{       
    UIImageView *img = [[UIImageView alloc] init];
    img.bounds = CGRectMake(10, 10, 50, 50);
    img.frame = CGRectMake(5+xOffset, 0, 50, 50);
    NSLog(@"image: %@",[imagesName objectAtIndex:index]);
    img.image = [UIImage imageNamed:[imagesName objectAtIndex:index]];
    [images insertObject:img atIndex:index];         
    scrollView.contentSize = CGSizeMake(scrollWidth+xOffset,110); 
    [scrollView addSubview:[images objectAtIndex:index]];

    xOffset += 70;
}

Также установите это ....

imagesName = [[NSArray alloc]initWithObjects:@"image1.jpg",@"image2.jpg",@"image3.jpg",@"image4.jpg",@"image5.jpg",@"image6.png",@"image7.png",@"image9.png",nil];
    images = [[NSMutableArray alloc]init];
26 голосов
/ 14 октября 2013

Так что для меня проблема была в том, что установка размера контента не работала в viewDidLoad().Я попробовал все, и я не понял, почему это не сработает, а затем я попробовал то же самое в viewDidAppear(), и это волшебным образом сработало ...

10 голосов
/ 14 марта 2012

Из вашего последнего скриншота и ваших комментариев видно, что ваш scrollView слишком большой. Вид прокрутки должен быть полностью виден на экране. Например, полноэкранный UIScrollView на iPhone будет иметь размер 320 x 460.

Если размер прокрутки имеет такой же размер, как и его содержимое, прокрутка невозможна.

Зеленоватый прямоугольник показывает размер вашего прокрутки, розоватый размер вашего контента (вашего изображения):

enter image description here

6 голосов
/ 09 декабря 2013

С Xcode 5 он не работает как раньше. Также проблема с прокруткой до конца прокручиваемого текстового поля. Есть также различия между этим на iPhone или iPad. На айфоне он работал без таймера.

Это сработало для меня:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSTimer *timerforScrollView;
    timerforScrollView =[NSTimer scheduledTimerWithTimeInterval:0.1
           target:self selector:@selector(forScrollView)userInfo:nil repeats:NO];   
}

- (void) forScrollView {
    [scrollviewPad setScrollEnabled:YES];
    [scrollviewPad setContentSize:CGSizeMake(768, 1015)]; // must be greater then the size in Storyboard
}
6 голосов
/ 18 марта 2013

Я столкнулся с той же проблемой на iOS6, и решение было программно настроить ContentSize .Поэтому я просто процитирую слова Раджи (выше), чтобы показать это:

CGSize scrollViewContentSize = CGSizeMake(320, 400);
[self.scrollView setContentSize:scrollViewContentSize];

ПРИМЕЧАНИЕ: у меня не было этой проблемы на iOS5 .. похоже, iOS6 решила сделать много розыгрышей, как вращение / ориентациясага

6 голосов
/ 29 января 2014

Я обнаружил, что у меня была похожая проблема, но ни один из приведенных выше кодов не работал. Проблема была из-за автопоставки. Я обнаружил, что если я отключил автоматическое расположение, перейдя к раскадровке, щелкнув Утилиты -> Инспектор файлов и сняв флажок Use Autolayout, прокрутка сработала (я также установил scroll.contentSize = ...).

4 голосов
/ 03 июня 2017

Swift 4, iOS 11

Самый простой способ с использованием autolayout:

  1. Добавьте UIScrollView и прикрепите его 0,0,0,0 к суперпредставлению (или желаемому размеру)
  2. Добавьте UIView в ScrollView, прикрепите его 0,0,0,0 ко всем 4 сторонам и отцентрируйте по горизонтали и вертикали.
  3. В инспекторе размеров измените приоритет «Низ» и «Выровнять центр Y» на 250.
  4. Добавьте все представления, которые вам нужны, в это представление. Не забудьте , чтобы установить нижнее ограничение для самого нижнего вида.
3 голосов
/ 18 декабря 2013

Иногда флажок autoLayout отмечен в xib. Это также создает эту проблему в xcode 5. Что делает прокрутку UIScrollView.

3 голосов
/ 09 июля 2013

Не забудьте добавить в интерфейс протокол категории , например,

@interface MyViewController : <UIScrollViewDelegate>

Если вы этого не сделаете, вы не сможете установить делегат с прокруткой.к себе

(то есть [MyScrollView setDelegate:self];)

Если вы сделаете это, оно должно работать.

Мой код:

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    [contentScrollView setDelegate:self];
    [contentScrollView setScrollEnabled:YES];
    contentScrollView.contentSize = CGSizeMake(310, 500);
    contentScrollView.frame = CGRectMake(5, 188, 310, 193);
}
2 голосов
/ 14 марта 2012

Вы назначили делегата представления свитка? Всегда помните это:

[self.scrollView setDelegate:self]; 
[self.scrollView setScrollEnabled:YES];
...