2015-03-12 1 views
1

Я разработал быстрый проект, который в основном перечисляет элементы в виде таблицы. я беру новые данные с сервера и добавляю их в конец таблицы. До этого момента все работает правильно, но при прокрутке вверх, это jump. Я использую эти две функцииIOS 8 авто высота ячейки работает, но когда я прокручиваю вверх, он прыгает

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    return UITableViewAutomaticDimension 
} 

и

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 80 
} 

Мой пользовательский класс клетка является основным:

class StatusTableViewCell: UITableViewCell { 

@IBOutlet weak var userNameLabel: UILabel! 


@IBOutlet weak var statusBodyLabel: TTTAttributedLabel! 

@IBOutlet weak var statusCreateTimeLabel: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 

    statusBodyLabel.enabledTextCheckingTypes = NSTextCheckingType.Link.rawValue 

} 


override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 
} 

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 

    self.contentView.layoutIfNeeded() 

} 

}

я не могу найти какое-либо решение по этому поводу. Это занимает три дня. Помогите мне решить прыжок прокрутки.

Спасибо,

+0

Вы можете напрямую возвратить 80 в heightforrowatindexpath –

+0

Насколько хороша оценка 80? Какова средняя высота клеток? –

+0

@MaheshAgrawal, который победил бы цель Autolayout. –

ответ

2

Я решаю проблему! Я сделал два шага.
Во-первых, я вычислить высоту строки моего заказного ячейки себя как эта функция

func heightForView(text:String, #font:UIFont, #width:CGFloat) -> CGFloat{ 
    let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max)) 
    label.numberOfLines = 0 
    label.lineBreakMode = NSLineBreakMode.ByWordWrapping 
    label.font = font 
    label.text = text 

    label.sizeToFit() 

    return label.frame.height 

}

Так что мой heightForRowAtIndexPath функция появляется как этот

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return heightForView(.....) 
} 

И я удалить эту функцию

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return 80 
} 

Подводя итог, я вычисляю высоту строки самостоятельно, вместо того, чтобы использовать UITableViewAutomaticDimension. Затем я удаляю heightForRowAtIndexPath.

Это все. Надеюсь, это поможет вам, ребята.