一个应用程序包含一个包含自定义 UITableViewCell 的 UITableView。该单元格又包含一个 UIImageView。
问题是在 cellForRowAtIndexPath 中设置图片会使图片占据整个 UITableViewCell 区域:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
NSString *path = [[NSBundle mainBundle] pathForResource:@"bigrect" ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:path];
cell.imageView.image = image;
return cell;
}
在 IB 中,已选择“Aspect Fit”作为模式,但更改此字段对结果没有明显影响。
但是,当从 IB 设置图像时,在我的代码中没有调用 cell.imageView.image = image 时,结果正是我希望看到的。图像保持在我为 IB 中的 UIImageView 定义的范围内,并且不会尝试缩放以适应 UITableViewCell 的整个垂直高度:
我使用的图像是 1307x309 像素,以防万一。测试在 iOS 6.1 模拟器上运行。
我从UIIMageView 文档中注意到了这一点:
在 iOS 6 及更高版本中,如果您为此视图的 restoreIdentifier 属性分配一个值,它会尝试保留显示图像的框架。具体来说,该类保留视图的边界、中心和变换属性的值以及底层的锚点属性。在恢复过程中,图像视图会恢复这些值,以便图像与以前完全一样。有关状态保存和恢复如何工作的更多信息,请参阅 iOS App Programming Guide。
但是,我无法在文档中的此处或其他地方找到任何解决问题的方法。在“身份”下的 IB 中的 UIImageView 中添加“Foo”的“恢复 ID”并没有改变行为。取消选中“使用自动布局”也没有改变行为。
设置图像时,如何防止 iOS 在 UITableViewCell 中调整 UIImageView 的大小?