Вот длина и короткость:
- Ширина вашей ячейки определяется шириной табличного представления, в котором она находится.
[РЕДАКТИРОВАТЬ: Если это сгруппированоВ табличном представлении ячейка на 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);
}
Я не размещал здесь весь этот код, так как он подразумевается и что яВы должны опубликовать все, что вам нужно, чтобы сделать логический массив.
В любом случае, вы здесь.Я только что проверил этот код сам, чтобы он работал:)