универсальная проблема растяжения uitableview

Разрабатываю универсальное (iphone / ipad) приложение. Я использую uitableview в этом приложении. ячейка таблицы рисуется с использованием кода. Теперь проблема в том, что он может быть помещен на iPad или iPhone из одного кода, если я помещаю код только один раз.

Чтобы добиться этого, мне нужно поставить условие для проверки устройства, а затем нужно кодировать 2 раза, означает 1 для iphone и еще один для iPad, чтобы установить фоновые изображения и кадры uilable и т. Д.

Для меня это выглядит вздором и глупой работой. Есть ли способ достичь этой цели с помощью единого кода. Мой код такой, как показано ниже. Я использую 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;
}

Пожалуйста, помогите и дайте мне несколько идей. Заранее спасибо.


person Shivomkara Chaturvedi    schedule 26.12.2011    source источник


Ответы (1)


Вместо того, чтобы передавать жестко запрограммированные агрументы во фрейме, вы можете определять фрейм динамически, используя свойство просмотра frame и bounds. Но вы должны позаботиться о каждом элементе пользовательского интерфейса.

person rishi    schedule 26.12.2011
comment
Например, попробуйте -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)]; - ›и это решит кадр. - person rishi; 26.12.2011