为什么在iOS 6中分配一个新的形象,当一个UIImageView得到调整大小?(Why does

2019-08-18 16:04发布

应用程序包含包含自定义的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;
}

在图1B中,“纵横适合”已经被选择作为模式,但改变该字段对结果没有明显的影响。

然而,当图像从IB设置,在我的代码没有调用cell.imageView.image =图像,结果正是我想看到的。 图像保持我为的UIImageView在IB定义的,并不试图将规模扩大到适合的UITableViewCell的整个垂直高度的范围之内:

我使用的图片是1307x309像素,万一这很重要。 测试是在iOS 6.1模拟器上运行。

我注意到这个从UIImageView的文档 :

在iOS 6中和后,如果您分配一个值这个观点的restorationIdentifier属性,尝试保留所显示的图像的帧。 具体地,类保存界限,中心的值,和变换视图和下层的anchorPoint属性的属性。 在恢复过程中,以使得图像看起来完全相同前的图像视图恢复这些值。 有关状态保存和恢复如何工作的详细信息,请参见iOS应用程序编程指南。

然而,这里没有什么或其他地方的文件中我能找到解决的问题。 添加“富”到的UIImageView在IB下的“身份”的“中兴ID”并没有改变行为。 取消选中“使用自动布局”也并没有改变行为。

如何防止iOS设备的设置图像时在一个UITableViewCell调整大小的UIImageView?

Answer 1:

事实证明,显然的UITableViewCell已经有一个名为“ImageView的”属性覆盖小区的整个背景。 设置此ImageView的对象的图像属性设置背景图片,而不是像我感兴趣的东西。

改变我的方法如下,同时确保CustomCell具有“myImageView”属性固定的问题:

- (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.myImageView.image = image;

    return cell;
}

这SO回答到一个稍微不同的问题,指出我在正确的方向。



文章来源: Why does a UIImageView get resized when assigning a new image in iOS 6?