0

我正在尝试更改 UITableViewController 单元格中图像的位置。这是我的代码:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIImageView *cellImage = cell.imageView;
    CGRect frame = cellImage.frame;
    frame.origin.x = 4;
    frame.origin.y = 2;
    cell.backgroundColor = [UIColor lightGrayColor];
}

到目前为止,唯一有效的是背景颜色。有什么建议么?这是我现在拥有的屏幕截图:

在此处输入图像描述

现在图像居中,但我希望将它们移近一点,靠近单元格的左上角。

4

4 回答 4

1

如果您的 UI 是在 IB 中创建的并且自动布局已打开,您需要更新图像视图上的约束,然后您甚至不必担心更改框架,因为自动布局会强制更改本身。本指南在技术上适用于 OS X,但大部分内容相同:https ://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/Articles/Introduction.html#//apple_ref/doc/uid /TP40010853 如果您不熟悉自动布局,还有一个 2012 年的 WWDC 视频提供了概述。

于 2013-06-27T16:52:16.827 回答
1

您可以将此代码添加到单元格的 layoutSubviews 方法中。像这样的东西

-(void)layoutSubviews 
{
    [super layoutSubviews];
    UIImageView *cellImage = self.imageView;
    CGRect frame = cellImage.frame;
    frame.origin.x = 4;
    frame.origin.y = 2;
    self.imageView.frame = frame;
    self.backgroundColor = [UIColor grayColor];

}

并且不要忘记实际更改 self.imageView.frame

于 2013-06-27T18:22:29.340 回答
0

您快到了,您已经修改了框架和背景颜色,但您忘记设置单元格的实际框架。您需要在更改框架后添加它:

cellImage.frame = frame;

或者

cell.imageView.frame = frame;

它在您的实现中不起作用的原因是您正在获取图像视图的框架并将其设置为另一个属性(frame在这种情况下)。然后,您将更改该属性原点,而不是单元格的原点。

背景颜色有效,因为您直接在单元格上cell.backgroundColor进行调用(您正在调用单元格的设置器)。所以你需要对视图的框架做同样的事情。

于 2013-06-27T16:32:29.863 回答
-1

这是在一个班轮中实现相同目标的方法:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell.imageView setFrame:CGRectMake(2, 4, cell.imageView.frame.size.width, cell.imageView.frame.size.height)];
}
于 2013-06-27T17:58:14.577 回答