Программно автоматически изменяющий размер UITableViewCell, содержащий несколько подпредставлений - PullRequest
0 голосов
/ 25 октября 2010

У меня есть UITableView , который пытается выглядеть как сетка: то есть я имитирую четыре столбца, добавляя UILabel ** s как ** cell.contentView подпредставления.Три из этих «столбцов» имеют фиксированную ширину, и при повороте я хочу автоматически изменить размер самого левого столбца, чтобы заполнить все доступное пространство (ширина экрана минус общая ширина трех других столбцов).

Код инициализации ячейки - этоследующее:

#define kCellWidth ((UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) ? 1024 : 768)
#define kCellHeight 60

#define kXOffset 10
#define kYOffset 10
#define kContentHeight (kCellHeight - 2*kYOffset)

#define kTypeWidth  125
#define kNumberWidth 100
#define kDateWidth  90
#define kLabelWidth  (kCellWidth - (2*kXOffset + kTypeWidth + kNumberWidth + kDateWidth))

#define kTypeOffset  (kXOffset + kLabelWidth)
#define kNumberOffset (kTypeOffset + kTypeWidth)
#define kDateOffset  (kNumberOffset + kNumberWidth)

#define kLabelTag 1
#define kTypeTag 2
#define kNumberTag 3
#define kDateTag 4

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier];

 if (cell == nil) {
  cell = [self cellWithFrame:CGRectMake(0, 0, kCellWidth, kCellHeight)
      identifier:kCellIdentifier];
 }

 Clazz *obj = [self.source objectAtIndex:indexPath.row];
 ((UILabel *) [cell viewWithTag:kLabelTag]).text  = obj.label;
 ((UILabel *) [cell viewWithTag:kTypeTag]).text  = obj.type;
 ((UILabel *) [cell viewWithTag:kNumberTag]).text = obj.number;
 ((UILabel *) [cell viewWithTag:kDateTag]).text  = obj.date;

 return cell;
}

-(UITableViewCell *) cellWithFrame:(CGRect)frame identifier:(NSString *)identifier {
 UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:frame
               reuseIdentifier:kCellIdentifier] autorelease];

 [cell.contentView addSubview:[self labelForTag:kLabelTag
           withFrame:CGRectMake(kXOffset, kYOffset, kLabelWidth, kContentHeight)]];
 [cell.contentView addSubview:[self labelForTag:kTypeTag
           withFrame:CGRectMake(kTypeOffset, kYOffset, kTypeWidth, kContentHeight)]];
 [cell.contentView addSubview:[self labelForTag:kNumberTag
           withFrame:CGRectMake(kNumberOffset, kYOffset, kNumberWidth, kContentHeight)]];
 [cell.contentView addSubview:[self labelForTag:kDateTag
           withFrame:CGRectMake(kDateOffset, kYOffset, kDateWidth, kContentHeight)]];

 return cell;
}

-(UILabel *)labelForTag:(int)tag withFrame:(CGRect)frame {
 UILabel *label = [[UILabel alloc] initWithFrame:frame];
 label.tag = tag;

 switch (tag) {
  case kNumberTag:
  case kDateTag:
   label.textAlignment = UITextAlignmentCenter;
   break;
  default:
   break;
 }

 return [label autorelease];
}

Вопросы:

  • Можно ли добиться такого типа поведения, играя со свойством autoresizingMask и / или contentMode?
  • Если да,какие свойства объектов я должен изменить и на какие значения?

Я немного поэкспериментировал, но, поскольку я новичок в программировании для iPad, так и не смог найти решение.Заранее спасибо!

1 Ответ

0 голосов
/ 26 октября 2010
    CGRect frame = self.tableView.frame;
    CGFloat height1=120.0;
    [tableView setRowHeight:height1];
    self.tableView.frame = frame; 

Таким образом, вы можете программно установить высоту строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...