0

我是 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
4

3 回答 3

0

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

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

  1. layoutSubviews通过在调用后对 UITableViewCell 进行子类化来更改 imageView 的框架[super layoutSubviews],我已经尝试过了,您还必须移动 textLabel 因为它会被定位在错误的位置,因为图像现在更大/更小。
  2. 不要使用imageView,而是创建你自己的UIImageView,当然你必须重新定位 textLabel 或者创建你自己的,缺点是当设备旋转时UILabel你必须知道你和 UILabel 的位置和大小, UIImageViewtableView 调整大小等。
  3. 用透明度填充图像,使所有图像大小相同,并能够利用默认的UITableViewCell自动布局
  4. 现场调整图像大小,如以下答案:Incorrect size of Images in TableView

我想我会在我自己的情况下使用第三个选项,因为我可以控制每个单元格中使用的图像。

于 2012-09-03T21:52:42.010 回答
0

cellForRowAtIndexPart只需在部分中设置单元格 imageView 的 Frame

-(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;
}
于 2012-08-21T13:46:20.000 回答
0

试试“返回单元格”上方的这一行:

cell.imageView.frame = CGRectMake(0,0,32,32);
于 2012-08-21T13:43:06.410 回答