изменение размера фрейма UITableViewCell - PullRequest
1 голос
/ 13 мая 2011

Я пытаюсь изменить размер моего UITableViewCell's кадра с помощью:

 [cell setFrame:CGRectMake(cell.frame.origin.x, 
                           cell.frame.origin.y, 
                           cell.frame.size.width, 
                           cell.frame.size.height+25)];

однако, после того, как я это сделаю, размер не изменится ... почему?

Это странно, как будто я добавляю UIToolBar в ячейку, он изменяет размер, но когда я добавляю UIView, он не делает:

[cell.contentView addSubview:sideSwipeView];

Ответы [ 2 ]

8 голосов
/ 13 мая 2011

Вот длина и короткость:

  1. Ширина вашей ячейки определяется шириной табличного представления, в котором она находится.

[РЕДАКТИРОВАТЬ: Если это сгруппированоВ табличном представлении ячейка на 20 - 60 пикселей уже ширины табличного представления, в зависимости от того, используете ли вы iPhone или iPad.]

Высота вашей ячейки определяется методом heightForRowAtIndexPath.

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

Даже в этом случае рекомендуется получить кадр ячейки из табличного представления, используя метод rectForRowAtIndexPath:(NSIndexPath*)indexPath, а затем установить этот кадр в качестве кадра ячейки (после установкиначало фрейма Y равно 0).

Я не совсем уверен насчет UIToolBar, но фрейм вашего подпредставления не изменится при изменении фрейма ячейки.

Возможно, если бы вы могли сказать нам, чтоВы пытаетесь достичь, мы можем предложить решение для вас? -------------------- РЕДАКТИРОВАТЬ -------------------- Таким образом, вам нужно динамически добавить подпредставление в ячейку при нажатии на нее и изменить ее высоту в соответствии с новым подпредставлением.Это будет волосатым, так что вот так:

В вашем .h файле объявите:

BOOL subviewAdded;

В вашем .m файле, в init, выполните:

subviewAdded = NO;

Давайте предположим, что вы хотите, чтобы высота ячейки была 50 без подпредставления и 100 с подпредставлением.Соответственно, ваш метод heightForRow должен быть:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return (subviewAdded?100.0f:50.0f);
}

Это означает, что изначально, поскольку subviewAdded равно NO, все ваши ячейки будут иметь меньшую высоту.

Теперь, чтобы добавить подпредставление в ячейкунажав на него и динамически изменить его высоту, сделайте это в вашем методе didSelectRow:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //Get the cell at this indexPath

    UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];

    if(subviewAdded)
    {
        subviewAdded = NO;

        for(int i = 0; i < [thisCell.contentView.subviews count]; i++)
        {
            UIView *thisSubview = [thisCell.contentView.subviews objectAtIndex:i];
            [thisSubview removeFromSuperview];
        }
    }
    else 
    {
        UIView *someView = [[UIView alloc] initWithFrame:someFrame];

        [thisCell.contentView addSubview:someView];
        [someView release];

        subviewAdded = YES;
    }

    NSMutableArray *array = [NSMutableArray array]; 

    [array addObject:indexPath];

    [tableView reloadRowsAtIndexPaths:array 
                     withRowAnimation:UITableViewRowAnimationFade];
}

Итак, что здесь произойдет, вы добавите подпредставление в эту ячейку, к которой вы прикоснулись.Перезагрузка этой ячейки вызовет heightForRowAtIndexPath и сделает небольшую анимацию затухания и изменит высоту таблицы.

ВАЖНО: В идеале, вы должны поддерживать массив NSNumbers с логическими значениями.Размер массива должен совпадать с количеством ячеек таблицы.

В heightForRow вы бы тогда проверяли этот массив вместо использования одного логического значения для всего tableView.Это гарантирует, что у вас могут быть разные высоты для разных ячеек.

Это будет выглядеть примерно так:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    BOOL thisBool = (BOOL)[[booleanArray objectAtIndex:indexPath.row] boolValue];

    return (thisBool?100.0f:50.0f);
}

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

В любом случае, вы здесь.Я только что проверил этот код сам, чтобы он работал:)

5 голосов
/ 13 мая 2011

Если вы хотите увеличить высоту вашей ячейки на основе какого-либо параметра, например.текст, изображение, вы должны реализовать в своем коде heightForRowAtIndexPath метод UITableViewDelegate.

- (CGFloat)tableView:(UITableView *)tableView 
           heightForRowAtIndexPath:(NSIndexPath *)indexPath
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...