2014-10-22 3 views
2

У меня есть UITableView с пользовательским UITableViewCell, и я использую indentationLevel для перемещения содержимого вправо. В iOS 7 все работает нормально, но в iOS 8, когда я устанавливаю indentationLevel > 0, вид таблицы не отображает ячейку и интерфейс замерзает. Единственное решение - выйти из приложения. Если я останусь в отладке, я вижу, что память, используемая в приложении, постоянно увеличивается и что процессор находится на 99%.UITableViewCell indentationLevel не работает в iOS 8

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"CustomCellReuseID"; 
    TreeTableViewCell *cell = (TreeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    cell.delegate = self; 

    FolderSection *aFolderSection = self.dataSourceArray[indexPath.section]; 
    FolderNode *aFolderNode = (FolderNode *)aFolderSection.folderNodes[indexPath.row]; 

    cell.indentationWidth = 20.0f; 
    cell.indentationLevel = aFolderNode.level; 

    // set up the cell 

    return cell; 
} 

Идеи?

+0

Перед установкой 'indentationLevel', вы можете попробовать' 'NSLog'ing aFolderNode.level'? Я думаю, что это может быть проблема с тем, как это генерируется. – Undo

+0

Нет, 'aFolderNode.level' является правильным – Fry

ответ

0

Я думаю, у вас есть другая проблема, indentationLevel и indentationWidth оба работают в iOS 8, как и ожидалось.

Я хотел бы попробовать:

  • Удаление вызова получить доступ к DataSource и назначая indentationLevel к статическому значению (если это работает, у вас есть проблемы с DataSource для отладки).

  • Использование ванили UITableViewCell, чтобы убедиться, что это не проблема с вашим подклассом TreeTableViewCell.

  • Проверьте правильность настройки вашей раскадровки (при условии, что вы используете раскадровки и прототипы клеток). Убедитесь, что ваша ячейка прототипа, по сути, использует CellID, который вы вызываете (CustomCellReuseID в вашем случае).

5

Кажется, что iOS> 6 отображает представления до того, как вызываются методы для конфигурации отступа. Измените код в свой CustomCell.swift на это:

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.indentationWidth = 30.0 
    self.indentationLevel = 0 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    let indentPoints = CGFloat(self.indentationLevel) * self.indentationWidth 
    self.contentView.frame = CGRectMake(indentPoints, self.contentView.frame.origin.y,self.contentView.frame.size.width - indentPoints,self.contentView.frame.size.height) 
} 

, чтобы позвонить им надлежащим образом. И после этого в вашем cellForRowAtIndexPath:

... 
cell.indentationLevel = 1 // Your indentation level 
+0

Отлично работает на iOS 9. –

Смежные вопросы