IOS: автоопределение, из-за чего UIScrollView не выполняет прокрутку

Я установил UIScrollView, с которым я хочу отобразить 12 изображений (только 8 поместиться на экране), расположенных горизонтально. На следующем изображении вы можете увидеть проблему, с которой я сталкиваюсь (что делает мой прокрутки не прокруткой), мои ограничения и UIScrollView, которые я добавил в раскадровку:

Screenshot of storyboard showing constraints

Я вызвал следующий метод на -(void)viewDidLoad, где я "установил" свой scrollview (itemList - это свойство просмотра прокрутки, а itemNames - массив с именами images):

- (void)setupHorizontalScrollView
{
    self.itemList.delegate = self;
    [self.itemList setTranslatesAutoresizingMaskIntoConstraints:NO];

    [self.itemList setBackgroundColor:[UIColor blackColor]];
    [self.itemList setCanCancelContentTouches:NO];

    self.itemList.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    self.itemList.clipsToBounds = NO;
    self.itemList.scrollEnabled = YES;
    self.itemList.pagingEnabled = NO;

    NSInteger tot=0;
    CGFloat cx = 0;
    for (; ; tot++) {
        if (tot==12) {
            break;
        }

        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.itemNames objectAtIndex:tot]]];

        CGRect rect = imageView.frame;
        rect.size.height = 40;
        rect.size.width = 40;
        rect.origin.x = cx;
        rect.origin.y = 0;

        imageView.frame = rect;
        [self.itemList addSubview:imageView];
        cx += imageView.frame.size.width;
    }

    [self.itemList setContentSize:CGSizeMake(cx, [self.itemList bounds].size.height)];
}

Я добавил [self.itemList setTranslatesAutoresizingMaskIntoConstraints: NO]; потому что я видел это предложение на других постах, но он не работает с ним или без него. Единственный способ, которым это работает, - отключить использование AutoLayout на раскадровке, но это перемещает UIImageView, который я использую, чтобы выглядеть как панель навигации в нижней части экрана. Я не знаю, что делать дальше, любая помощь приветствуется:)

Ответ 1

Два решения:

  • Создайте различные ограничения, которые могут быть выполнены одновременно (вам придется редактировать). Я думаю, что проблема заключается в том, что ваше нижнее пространство и ограничения верхнего пространства являются взаимоисключающими. удалите его и повторите попытку. Если вам это сложно, попробуйте добавить еще один UIView, чтобы содержать UIScrollView, чтобы помочь вам управлять вашими ограничениями, сначала это может показаться странным, но иногда добавление другого представления, чтобы содержать ваше представление, на самом деле делает его более простым на каждом уровне.

  • Отключите автозапуск и измените маски автосохранения вашего UIImageView на то, что вы пожелаете.

Ответ 2

Попробуйте установить метод scrollView Content size "viewDidLayoutSubviews" с сохранением набора автозапуска.

-(void)viewDidLayoutSubviews
{
  [self.itemList setContentSize:CGSizeMake(required_width, required_height)];
}

Ответ 3

Вставить: [scrollView setContentSize:CGSizeMake(x,y)]; следующим способом:

-(void)viewWillAppear:(BOOL)animated