Jon*_*ore 23 iphone resize image uitableview ios
我的应用程序中有一个相当普通的UITableView,用于以默认/标准方式显示图像和文本.第一次请求UITableViewCell时,我使用占位符图像返回它并开始异步下载真实图像.下载完成后,我替换占位符图像.
如果下载失败,则占位符图像仍然存在.单击这样一行就可以正常工作.如果下载成功,单击具有预期图像的行将导致UIImageView扩展到行的高度(并且宽度按比例增加).UIImageView永远不会恢复正常大小.原始尝试设置UIImageView的框架并没有缓解神秘的大小调整问题.
// from my - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; method
// after boilerplate cell dequeuing code
cell.textLabel.text = [selectedNoun title];
// add placeholder image
UIImage *placeholderImage = [UIImage imageNamed:@"placeholder.png"];
cell.imageView.image = placeholderImage;
[cell.imageView setContentMode:UIViewContentModeScaleAspectFit];
//...
// If the image has been downloaded I set it
cell.imageView.image = iconDownloader.image;
Run Code Online (Sandbox Code Playgroud)
这让我疯了.它实际上只发生在我的应用程序中的两个表之一,但在比较它们的行或行后,我看不出任何差异.希望有人之前遇到过这种情况.
谢谢!
编辑:我没有一个很好的解释我的解决方案,除了说超过一定大小的图像似乎导致这种行为和使用实际缩略图(甚至图像比UIImageView的框架稍大)不表现出这种行为.
kal*_*deo 24
如果您有自定义UITableViewCell,请确保您的UIImageView未以"imageView"命名
XJo*_*nes 11
在其超级视图中影响视图大小和外观的唯一事物是:
您是否在任何地方更改框架/边界/中心属性?框架最初设置在何处/如何设置?
imageView.autoResizingMask 应该设置为 UIViewAutoResizingNone
imageView.clipsToBounds 应该设置为 YES
编辑:更多建议
我在黑暗的b/c拍摄你发布的代码看起来很好,如果你设置了imageView.clipsToBounds它应该将绘制的图像约束到imageView框架.这里还有几件事要尝试:
tableView:willDisplayCell:forRowAtIndexPath:在imageView那里实现和设置属性.如果imageView.frame是问题,这可能无法修复.
将您自己添加UIImageView到已配置的单元格中,并且不要使用内置imageView属性.如果默认单元格的行为导致问题,这应该工作.
编辑:大图像问题
我不知道你目前正在使用的"真正大图像"究竟有多大,但它们可能就是问题所在.从UIImage文档(重点是我的):
您应该避免创建大小超过1024 x 1024的UIImage对象.除了这样的图像会占用大量内存之外,在OpenGL ES中将图像用作纹理或将图像绘制到视图或图层时,可能会遇到问题.如果您正在执行基于代码的操作,则此大小限制不适用,例如通过将大小超过1024 x 1024像素的图像绘制到位图支持的图形上下文来调整大小.实际上,您可能需要以这种方式调整图像大小(或将其分成几个较小的图像),以便将其绘制到您的一个视图中.