UIImageView игнорирует мою настройку ContentMode

88
8

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

В моем приложении у меня есть массив UIImages, которые фактически уменьшают фотографии, сделанные камерой iPhone.

Я пытаюсь показать UIImage в scrollView, правильно масштабированный, чтобы показать весь образ.

Это мой код:

scrollView.pagingEnabled = YES;
scrollView.clipsToBounds = NO;

CGFloat contentOffset = 0.0f;

pageControl.numberOfPages = [imageArray count];
pageControl.currentPage = 0;

for(UIImage *image in imageArray)
{
NSLog(@"image width = %f, image height = %f", image.size.width, image.size.height);

CGRect imageViewFrame = CGRectMake(contentOffset, 0, scrollView.frame.size.width, scrollView.frame.size.height);

UIImageView *imageView = [[UIImageView alloc] initWithFrame:imageViewFrame];
[imageView setImage:image];
[imageView setClipsToBounds:YES];
[imageView setContentMode:UIViewContentModeScaleAspectFill]; //I've tried others, but nothing seems to show the entire image
[scrollView addSubview:imageView];
[imageView release];
contentOffset += scrollView.frame.size.width;
[scrollView setContentSize:CGSizeMake(contentOffset, 0)];
}

Просто отметим, что это ориентированное на портфолио приложение, и само изображение было взято в портретной ориентации.

Выход NSLog:

image width = 387.200012, image height = 518.400024

Изображение, которое я вижу, отображается в UIImageView (в прокрутке) - это увеличенное изображение центра изображения, независимо от того, к чему я изменяю contentmode.

Что я здесь делаю неправильно? Спасибо!

спросил(а) 2021-01-25T16:34:33+03:00 4 месяца, 4 недели назад
1
Решение
64

Ответ - это то, что я прокомментировал ранее: коэффициент масштабирования UIImage заставлял ContentMode не работать. Или, по крайней мере, заставило его работать.

ответил(а) 2021-01-25T16:34:33+03:00 4 месяца, 4 недели назад
45

Я знаю, что это было задано и ответили, но, похоже, в последнее время есть еще одна причина для этого вопроса. Начиная с tvOS 9.1, настройка adjustsImageWhenAncestorFocused похоже, делает устаревшую contentMode (возможную ошибку) для UIImageView. Я надеюсь, что это помогает кому-то.

ответил(а) 2021-01-25T16:34:33+03:00 4 месяца, 4 недели назад
46

Вы устанавливаете размер содержимого для scrollView с высотой 0 и contentOffset как шириной... что явно не может работать.

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


То, что вы, по- видимому хотите сделать, это установить рамку ImageView к contentOffset в п раз ширину экрана, так что вы можете перемещаться по горизонтали через образы. Таким образом, установите размер UIImageView на размер экрана, а его начало - на (n * screenSize.width, 0) и размер содержимого прокрутки до ((n + 1) * screenSize.width, screenSize.height), n - число изображений.

ответил(а) 2021-01-25T16:34:33+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема