Центрирование подпредставлений в UITableViewCell внутри сгруппированного TableView - PullRequest
1 голос
/ 11 сентября 2010

Я пытаюсь выяснить, как разместить подпредставление для пользовательского UITableViewCell с центрированной позицией.Как указано в документации ( Настройка ячеек ), необходимо "... добавить подпредставления в свойство contentView объекта ячейки или ...".Как я заметил, он отлично работает с UITableViewStylePlain.В таблицах UITableViewStyleGrouped подпредставления нельзя размещать по центру.Они смещены в правую часть.

Если подпредставление добавляется непосредственно в UITableViewCell, это нормально для обоих режимов.То же самое верно, если я создаю подкласс UITableViewCell и загружаю ячейку из XIB.

К сожалению, я не могу загрузить скриншоты.Кто-нибудь может помочь решить проблему?Или я пропускаю что-то жизненно важное, поскольку смещение, по-видимому, соответствует измерению, которое будет сокращено в сгруппированной таблице.

Большое спасибо, Эл

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier1 = @"AddToCell";
static NSString *cellIdentifier2 = @"AddToContentView";
static NSString *aVeryLongLine = @"---------------------------------------------";
UITableViewCell *cell = nil;
if (indexPath.section == 0) {
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier1];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                       reuseIdentifier:cellIdentifier1] autorelease];

        CGRect frame = cell.frame;
        CGRect labelFrame = CGRectMake((frame.size.width-270)/2, (frame.size.height-40)/2, 270, 40);
        UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];
        label.textAlignment = UITextAlignmentCenter;
        label.text = aVeryLongLine;
        [cell addSubview:label];
        [label release];
    }       
}
else if (indexPath.section == 1) {
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier2];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                       reuseIdentifier:cellIdentifier2] autorelease];

        CGRect frame = cell.contentView.frame;
        CGRect labelFrame = CGRectMake((frame.size.width-270)/2, (frame.size.height-40)/2, 270, 40);
        UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];
        label.textAlignment = UITextAlignmentCenter;
        label.text = aVeryLongLine;
        [cell.contentView addSubview:label];
        [label release];
    }               
}
else {
}

return cell;

}

Ответы [ 2 ]

1 голос
/ 11 сентября 2010

Экземпляры UITableViewCell изменяют размер своих представлений содержимого при ряде обстоятельств (например, при временном добавлении кнопки удаления, чтобы позволить пользователю удалить строку).

Когда ячейки отображаются в виде таблицы сгруппированных стилей, их размеры изменяются, чтобы обеспечить поле между ячейками и левым и правым краями представления таблицы. Таким образом, чтобы ваши подпредставления оставались в правильном положении, вам нужно соответствующим образом установить их маски автоматического изменения размера, примерно так:

mySubview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

(или

[mySubview setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | 
                                UIViewAutoresizingFlexibleLeftMargin |
                                UIViewAutoresizingFlexibleRightMargin)];

для людей, которые предпочитают старый синтаксис.)

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

Проверяли ли вы значение фрейма из cell.contentView.frame или cell.frame?

Когда ячейка инициализируется со стилем и идентичностью, у нее может быть CGZeroRect для его значения кадра.

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