Свойство indentationLevel, похоже, ничего не делает? - PullRequest
7 голосов
/ 20 августа 2009

У меня есть число строк, которые я вставляю в таблицу, используя -insertRowsAtIndexPaths: withRowAnimation, и я хотел бы, чтобы строки были с отступом слева, чтобы отличать их от остальных ячеек. Свойство indentationLevel для UITableViewCell выглядит так, как будто оно именно то, что мне нужно, но, похоже, ничего не делает. Вот код, который я использую для установки уровня отступа (точечный синтаксис не имеет значения):

[cell setIndentationWidth:10];
[cell setIndentationLevel:1];

Является ли indentationLevel тем, что я хочу, или я должен искать в другом месте?

Ответы [ 6 ]

14 голосов
/ 02 декабря 2009

indentationLevel и indentationWidth влияют на расположение стандартных элементов textLabel, detailTextLabel и imageView. Они не влияют на происхождение фрейма contentView.

Если вы не используете textLabel и т. Д. (Возможно, из-за ориентации на iPhone OS 2), вам нужно обработать отступ вручную, как показывает предыдущий ответ.

3 голосов
/ 22 февраля 2014

Это похоже на ошибку в iOS 7, если вы не используете пользовательские ячейки.

Установка indentationLevel или indentationWidth в пределах tableView:cellForRowAtIndexPath: не влияет на компоновку ячейки, когда пришло время ее отображать.

Например, рассмотрим следующий код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    BOOL isIndented = indexPath.row % 2;

    cell.textLabel.text = isIndented ? @"Indented" : @"Not indented";
    cell.indentationLevel = isIndented;
}

У меня недостаточно репутации, чтобы публиковать скриншоты, но результат отличается для iOS 6 и iOS 7. Это использует Xcode 5 и iOS 7 SDK.

1 голос
/ 28 января 2014

У меня возникла похожая проблема с моим приложением. У меня был UITableView, который НЕ использовал пользовательские ячейки. Я использовал UITableViewCell с основным стилем. В моем методе делегата - (UITableViewCell *)tableView: cellForRowAtIndexPath: я установил ячейки indentationWidth и indentationLevel. Они ничего не сделали. Я даже пытался изменить метод делегата - (NSInteger)tableView: indentationLevelForRowAtIndexPath:. Ничего.

Что в итоге сработало, так это перейти на раскадровку и изменить атрибуты самой ячейки табличного представления. Как только я установил ширину отступа, я начал получать правильные отступы. Свойство indentationLevel начало работать. Даже - (NSInteger)tableView: indentationLevelForRowAtIndexPath: был полезен.

По сути, похоже, что свойство indentationWidth игнорируется в пользу "ширины отступов" в раскадровке.

Это было с Xcode 5.0.2 для iOS 7.

1 голос
/ 25 октября 2009

Возможно, вы переопределяете его реализацию в своих клетках. в

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
        if (cell == nil) 
        { 
            cell = (UITableViewCell*)[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cellType01"] autorelease]; 
            [cell setIndentationLevel:indexPath.row];
            [cell setIndentationWidth:10];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            // Tag the view 
            [[[cell subviews] objectAtIndex:0] setTag:111]; 
            UILabel* labelView = [[UILabel alloc] initWithFrame: CGRectMake(cell.indentationLevel*cell.indentationWidth, 0, 300, 20)]; 
        }
   }
0 голосов
/ 22 июня 2014

Я знаю, что этому вопросу 4 года, но если вы уже используете пользовательский подкласс UITableViewCell, и , вы уже добавляете свои представления как подпредставления contentView убедитесь, что вы не переопределяете layoutSubviews в своей камере. Если это так, вам нужно вручную отрегулировать границы / центр или фрейм contentView в layoutSubviews.

0 голосов
/ 20 августа 2009

Все, что я прочитал, говорит о том, что вы должны это делать. Убедитесь, что вы не создаете новую ячейку с тем же указателем позже в коде (после установки отступа, но до его отрисовки). Вы пробовали установить отступ на что-то большее, что было бы более заметно на экране (скажем, 100px вместо 10)?

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