Как бороться с константами положения экрана в коде iPhone? - PullRequest
0 голосов
/ 07 сентября 2010

У меня есть требование, чтобы заполнить ячейки с текстом обтекания различной длины.Моя текущая рутина справляется с этим удовлетворительно, однако я обеспокоен использованием нескольких используемых констант.

Значения 10 и 260 ниже представляют собой ожидаемые поля и ширину ячейки, но они точны только для стандартного разрешения разрешения в портретной ориентации.

Есть ли какой-нибудь объект экрана / таблицы, который предоставляет мне эти значения в качестве метрик, которые я мог бы использовать вместо констант?

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

    UITableViewCell *cell;
    UILabel *lbl;
    CGRect frame;

    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero 
                                   reuseIdentifier:AnswerIdentifier] autorelease];

    frame.origin.x = 10;
    frame.origin.y = 10;
    frame.size.height = [self textHeight:indexPath];
    frame.size.width = 260;

    lbl = [[UILabel alloc] initWithFrame:frame];
    lbl.lineBreakMode = UILineBreakModeWordWrap;
    lbl.numberOfLines = 0;         
    [cell.contentView addSubview:lbl];
    [lbl release];

    return cell;

}

- (CGFloat)textHeight:(NSIndexPath *)indexPath {

    CGSize textSize;
    CGSize constraintSize;
    CGFloat height;

    NSString *theText = [self cellText:indexPath];

    constraintSize = CGSizeMake(260.0f, MAXFLOAT);

    textSize = [theText sizeWithFont:kCELL_FONT 
                   constrainedToSize:constraintSize 
                       lineBreakMode:UILineBreakModeWordWrap];
    height = textSize.height;

    return height;

}

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

Попробуйте использовать

[[UIScreen mainScreen] applicationBounds]; 

Это вернет CGRect для текущего размера окна.Тогда для своего кода вы можете использовать:

CGRect screenRect = [[UIScreen mainScreen] applicationBounds]; 
frame.origin.x = 10;
frame.origin.y = 10;
frame.size.height = [self textHeight:indexPath];
frame.size.width = screenRect.size.width - 60.0;

Предполагая, что смещения пикселей в x фиксированы, с гибкой шириной метки.

0 голосов
/ 07 сентября 2010

Таблица, очевидно, должна вписываться в кадр содержащего представления (это может быть представление верхнего уровня или окно), поэтому я мог бы использовать процентное или пиксельное смещение от этого прямоугольника.

...