我正在尝试更改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];
}
到目前为止,唯一有效的是背景颜色。有什么建议? 这是我现在拥有的截图:
现在图像居中但我希望将它们移动到靠近单元格的左上角。
答案 0 :(得分: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视频,如果您不熟悉自动布局,则会提供概述。
答案 1 :(得分: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
答案 2 :(得分:0)
你几乎就在那里,你修改了框架和背景颜色,但你忘了设置单元格的实际框架。您需要在更改框架后添加此内容:
cellImage.frame = frame;
或
cell.imageView.frame = frame;
它在您的实现中不起作用的原因是您正在获取图像视图的框架并将其设置为另一个属性(在这种情况下为frame
)。然后,您正在更改属性原点,而不是单元格的原点。
背景颜色有效,因为您直接在单元格cell.backgroundColor
上进行调用(您正在调用单元格的setter)。所以你需要对视图的框架做同样的事情。
答案 3 :(得分:-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)];
}