UIImageView 忽略了我的 ContentMode 设置

Posted

技术标签:

【中文标题】UIImageView 忽略了我的 ContentMode 设置【英文标题】:UIImageView is ignoring my ContentMode setting 【发布时间】:2012-03-13 05:36:28 【问题描述】:

我在这里找到了一些其他答案,但它们似乎不适用/工作,所以我认为这可能是由于我的特定代码。

在我的应用程序中,我有一组 UIImages,它们实际上是 iPhone 相机拍摄的按比例缩小的照片。

我正在尝试在滚动视图中显示 UIImage,并正确缩放以显示整个图像。

这是我的代码:

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(滚动视图内)上看到的图像都是图像中心的放大图像。

我在这里做错了什么?谢谢!

【问题讨论】:

如果缩放图像,内容模式将无法工作。 【参考方案1】:

答案就是我之前评论过的:UIImage 的缩放因子导致 ContentMode 不起作用。或者至少,让它看起来不起作用。

【讨论】:

【参考方案2】:

您将 scrollView 的内容大小设置为 0,将 contentOffset 设置为宽度......这显然无法正常工作。

您必须将滚动视图的内容大小设置为图像的大小。这就是内容大小的含义——如果它大于滚动视图的大小,滚动视图会让你滚动查看不在屏幕上的部分。

您显然想要做的是将 imageView 的框架设置为屏幕宽度的 n 倍的 contentOffset,以便您可以水平滚动图像.因此,将 UIImageView 的大小设置为您的屏幕大小,它的原点为 (n * screenSize.width, 0),滚动视图的内容大小为 ((n+1)*screenSize。 width, screenSize.height),其中 n 为图像计数。

【讨论】:

实际上,滚动视图工作正常,只是图像视图不尊重内容模式。不过我发现了问题。 UIImage 的比例因子为 5,这是我在程序前面设置的。解决这个问题可以解决问题。谢谢!【参考方案3】:

我知道这个问题已经被问到并得到了回答,但最近这个问题似乎还有另一个原因。从 tvOS 9.1 开始,设置 adjustsImageWhenAncestorFocused 似乎会使 contentMode 过时(一个可能的错误)UIImageView。我希望这对某人有所帮助。

【讨论】:

以上是关于UIImageView 忽略了我的 ContentMode 设置的主要内容,如果未能解决你的问题,请参考以下文章

iOS7 忽略 UIImageView 的 backgroundColor?

为啥 Spring 忽略了我的 @DependsOn 注释?

ModalViewController 中的 UIImageView 正在忽略 ContentMode - iPhone

为啥 Azure DevOps / TFS 中忽略了我的 repositoryPath?

解释哪个 gitignore 规则忽略了我的文件

为啥 MySQL WorkBench 在使用游标时忽略了我的 SIGNAL SQLSTATE?