如何在表格视图中设置相同尺寸的图像?

时间:2012-08-21 13:32:44

标签: iphone

我是iPhone新手 我正在创建一个应用程序,它显示国家/地区的名称和他们的标志作为缩略图。问题是所有图像的大小不相同,因此有不可预测的输出。

下面给出了代码

.h文件

IBOutlet UILabel *countryLabel;
IBOutlet UIImageView *thumbnailView;
IBOutlet UILabel *populationLable;

.m文件

#import "TextFieldAlertViewController.h"

@implementation TextFieldAlertViewController

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return [tableData count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *simpleTableIdentifier = @"SimpleTableItem";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

  if (cell == nil) {
   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
  }

  cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
  cell.imageView.image = [UIImage imageNamed:[thumbnails objectAtIndex:indexPath.row]];
  return cell;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  if (self) {
    // Custom initialization
  }
  return self;
}

- (void)loadView {
}

- (void)viewDidLoad {
  [super viewDidLoad];
  tableData = [NSArray arrayWithObjects:@"Australia", @"Brazil",@"China", @"Denmark", @"England", @"France", @"Germany", @"Hong Kong", @"India", @"Japan", @"Korea", @"Labanon", @"Malasiya", @"Niegiria", @"Peru", @"Swidden", nil];
  thumbnails = [NSArrayarrayWithObjects:@"aus.png",@"br.png",@"ch.png",@"dk.png",@"eng.png",@"fr.png", @"ger.png",@"hk.png",@"in.png",@"jp.png",@"ko.png",@"lb.png",@"my.png",@"ng.png",@"pe.png",@"sw.png",nil];
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
}

- (void)dealloc {
    [super dealloc];
}

@end

3 个答案:

答案 0 :(得分:0)

在“return cell;”上方尝试这一行:

cell.imageView.frame = CGRectMake(0,0,32,32);

答案 1 :(得分:0)

只需在cellForRowAtIndexPart部分

中设置您的单元格图像视图
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier];
    }
    cell.imageView.frame = CGRectMake(50, 10, 200, 50);
    return cell;
}

答案 2 :(得分:0)

我实际上现在遇到了同样的问题,目前的答案将无效,因为UITableViewCell中的所有标准视图都在layoutSubviews方法中调整大小,因此更改视图的框架,至少在tableView:cellForRowAtIndexPath:中不起作用。

据我所知,您有以下选择:

  1. layoutSubviews调用后通过[super layoutSubviews]继承UITableViewCell来更改imageView的框架,我已经尝试了这个,你还必须移动textLabel,因为它将被放置在错误的位置因为图像现在更大/更小。
  2. 不要使用imageView,而是创建自己的UIImageView,当然你必须重新定位textLabel或者更确切地创建自己的UILabel,缺点是你有要在旋转设备时了解UIImageView和UILabel的位置和大小,请调整tableView的大小等。
  3. 使用透明度填充图像,使所有图像大小相同,并且能够利用默认的UITableViewCell自动布局
  4. 现场调整图片大小,例如:Incorrect size of Images in TableView
  5. 我想我会在我自己的情况下使用第三个选项,因为我控制着每个单元格中使用的图像。