通用 uitableview 拉伸问题

Posted

技术标签:

【中文标题】通用 uitableview 拉伸问题【英文标题】:universal uitableview stretching issue 【发布时间】:2011-12-26 14:23:58 【问题描述】:

我正在开发一个通用(iphone/ipad)应用程序。我在这个应用程序中使用 uitableview。使用代码绘制的表格单元格。现在的问题是它可以通过单个代码安装在 iPad 或 iPhone 上,如果我只在一次上放置代码。

为了实现这一点,我需要设置条件来检查设备,然后需要编码 2 次,意味着 1 用于 iphone,另一个用于 iPad 来设置其背景图像和可用框架等。

这对我来说看起来很垃圾和愚蠢的工作。有没有办法通过单一代码来实现这个目标。 我的代码如下。我正在使用 xcode 4.2 ARC

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    UIFont *fontName=[UIFont fontWithName:@"HelveticaNeue LT 57 Cn" size:18.0f];
    UIFont *fontTitle=[UIFont fontWithName:@"HelveticaNeue LT 57 Cn" size:12.0f];
    UIFont *grayLight=[UIFont systemFontOfSize:12.0f];
    //UIFont *fontBold=[UIFont boldSystemFontOfSize:[UIFont systemFontSize]];

    UITableViewCell *cell = [[UITableViewCell alloc] init];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    NSMutableDictionary *dic=[arrEmails objectAtIndex:indexPath.row];
    //NSLog(@"%@",dic);
    int tot=4;
    NSString *imageName=[NSString stringWithFormat:@"inbox_list%d",(indexPath.row%tot)+1];

    UIImageView *imgBg=[[UIImageView alloc] initWithFrame:CGRectMake(-30, 10, 303, 70)];
    [imgBg setImage:[UIImage imageNamed:imageName]];
    [cell.contentView addSubview:imgBg];
    NSString *name=nameDisplayType==1 ? [[dic valueForKey:@"firstName"] stringByAppendingFormat:@" %@", [dic valueForKey:@"lastName"]] : [[dic valueForKey:@"lastName"] stringByAppendingFormat:@" %@", [dic valueForKey:@"firstName"]];

    UILabel *lblFirstName=[[UILabel alloc] initWithFrame:CGRectMake(30 ,15,150,20)];
    [lblFirstName setText:name];
    [lblFirstName setBackgroundColor:[UIColor clearColor]];
    [lblFirstName setTextColor:UIColorFromRedGreenBlue(162, 23, 25)];
    [lblFirstName setTextAlignment:UITextAlignmentLeft];
    [lblFirstName setFont:fontName];
    [lblFirstName setBackgroundColor:[UIColor clearColor]];
    [cell.contentView addSubview:lblFirstName];


    UILabel *lblEmailId=[[UILabel alloc] initWithFrame:CGRectMake(30,28,200,20)];
    [lblEmailId setText:[dic valueForKey:@"emailId"]];
    [lblEmailId setBackgroundColor:[UIColor clearColor]];
    [lblEmailId setTextAlignment:UITextAlignmentLeft];
    [lblEmailId setFont:grayLight];
    [lblEmailId setTextColor:[UIColor grayColor]];
    [lblEmailId setBackgroundColor:[UIColor clearColor]];
    [cell.contentView addSubview:lblEmailId];




    NSDateFormatter *formatter=[[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];
    NSDate *date=[formatter dateFromString:[dic valueForKey:@"date"]]; 
    [formatter setDateFormat:@"dd MMM, yyyy"];
    NSString *formattedDate=[formatter stringFromDate:date];
    //NSLog(@"%@ formated:%@",[dic valueForKey:@"date"],formattedDate);

    UILabel *lblDate=[[UILabel alloc] initWithFrame:CGRectMake(190,15,100,20)];
    [lblDate setText:formattedDate];
    [lblDate setBackgroundColor:[UIColor clearColor]];
    [lblDate setTextAlignment:UITextAlignmentLeft];
    [lblDate setFont:grayLight];
    [lblDate setTextColor:[UIColor blackColor]];
    [cell.contentView addSubview:lblDate];


    UILabel *lblTitle=[[UILabel alloc] initWithFrame:CGRectMake(20,53,200,20)];
    [lblTitle setText:[dic valueForKey:@"title"]];
    [lblTitle setBackgroundColor:[UIColor clearColor]];
    [lblTitle setTextAlignment:UITextAlignmentLeft];
    [lblTitle setFont:fontTitle];
    [lblTitle setTextColor:[UIColor blackColor]];
    [cell.contentView addSubview:lblTitle];

    UIButton *btnViewGift=[[UIButton alloc] initWithFrame:CGRectMake(235, 55, 20, 20)];
    [btnViewGift addTarget:self action:@selector(btnViewGiftPressed:) forControlEvents:UIControlEventTouchUpInside];
    [btnViewGift setTag:indexPath.row];
    [cell.contentView addSubview:btnViewGift];


    cell.accessoryType = UITableViewCellAccessoryNone;


    return cell;

请帮助并给我一些想法。提前致谢。

【问题讨论】:

【参考方案1】:

您可以使用 view 的 frame 和 bounds 属性动态地决定帧,而不是在帧中传递硬编码的参数。但是你必须照顾好每个 UI 元素。

【讨论】:

喜欢尝试 -UILabel *lblFirstName=[[UILabel alloc] initWithFrame:CGRectMake(self.view.frame.origin.x+someOffset ,self.view.frame.origin.y+someOtherOffset,self. view.frame.size.width/someWidthOffset, self.view.frame.size.height/someHeighOffset)]; -> 它将决定框架。

以上是关于通用 uitableview 拉伸问题的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 滚动条没有拉伸

UITableView 头部图片 图片拉伸

UITableView拉伸效果

UIViewController 内的 UITableView? [关闭]

水平 UITableView 中的垂直 UITableView

CoreData + UIViewController + UITableView