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