UIImageView 设置为 imageWithData 忽略 contentMode
Posted
技术标签:
【中文标题】UIImageView 设置为 imageWithData 忽略 contentMode【英文标题】:UIImageView set to imageWithData ignores contentMode 【发布时间】:2013-07-27 13:34:24 【问题描述】:在我的自定义 tableViewCell 中,我有一个填充整个单元格的 imageView(不是 tableViewCell 的默认 imageView)。它在 IB 中(通过代码)使用 contentMode UIViewContentModeAspectFill
设置,并且剪辑到边界。每当我将 imageView 的图像更改为使用[UIImage imageNamed:...]
加载的图像时,它都会根据需要调整大小并适合 imageView。但是,当使用[UIImage imageWithData:...]
加载图像集时,图像已设置,但未调整大小。
用数据本身加载图像的代码在后台线程中运行,如下所示:
- (void)getImage:(NSString *)URL
NSError *error = nil;
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:URL] options:NSDataReadingMapped error:&error]];
if (!error)
[self.thumbView setImage:image];
[self.thumbView setContentMode:UIViewContentModeScaleAspectFill];
我尝试在主线程上设置图像,在layoutSubviews
,但它总是产生相同的结果——它不会调整大小以填充图像视图。我将图像 (JPG) 添加到应用程序包中,并使用 [UIImage imageNamed:...]
以编程方式设置它,这可行,但应用程序必须从 URL 获取数据。
我也尝试使用 UIImageView+AFNetworking 类来设置图像异步而不是创建自己的线程,但这也不起作用。
为什么从数据中加载的图像不尊重 UIImageView 的 contentMode?任何帮助表示赞赏。 JPEG 和 PNG 都不起作用。
【问题讨论】:
@OliverAtkinson 真的更好吗?这个 sn-p 工作得很好,只是图像没有按预期调整大小。 它处理缓存图像,因此您不必担心会降低用户加载图像的体验。它还将遵循 UIImageView 上已设置的任何 contentMode 设置。 AFNetworking 可能是最好的。 那我试试看!谢谢:) 您使用的是过渡方法,这很奇怪。这些方法旨在用另一种视图替换一个视图。我会考虑在没有动画的情况下测试图像变化。然后尝试使用-[UIView animateWithDuration:animations:]
方法对图像的更改进行动画处理。有关详细信息,请参阅 UIView
文档。
正如所写,我已经尝试过没有过渡。过渡方法也是唯一适用于此目的的动画! :)
【参考方案1】:
如果其他人偶然发现了同样的问题,这就是我所做的解决方法。
我在 IB 中新建了一个 imageView,删除了旧的,只更改了 contentMode-value 和 clipsToBounds-value。在 tableViewCell.m 初始化代码中,我设置了占位符图像,瞧——一切都像魅力一样。
虽然我真的不知道是什么原因造成的,但可能是清除图形内容复选标记设置错误(哎呀)。
【讨论】:
以上是关于UIImageView 设置为 imageWithData 忽略 contentMode的主要内容,如果未能解决你的问题,请参考以下文章
将contentMode设置为UIViewContentModeScaleAspectFit时如何设置UIImageView左对齐或右对齐?
获取当前设置为 UIImageView 的图像名称的任何替代方法?
为 UIImageview 设置 Uianimation 和 Touch 事件