2015-04-12 4 views
0

Я встретил эту проблему после обновления xcode до 6.3. Первая сборка, скомпилированная с использованием xcode 6.2, не имеет этой проблемы и отлично работает.Содержимое пользовательской динамической высоты UITableViewCell в iOS8 имеет разную ширину

Проблема заключается в следующем: после переключения на другую вкладку и обратно или обратно из push segue ширина большинства ячеек немного уменьшится. Но некоторые нет. И это выглядит следующим образом: enter image description here

Содержание метки во 2-й строке ячейки имеет правильную ширину. И все ячейки отображают содержимое с правильной шириной после первого запуска. На изображении выше, есть два uitableviewcells. просмотр содержимого: синий; фоном виде: светло-зеленый; Содержимое Лейбл: фиолетовый;
Вид bg и contentLabel в 1-й ячейке сжимаются. Этого я не хочу.

Я использую раскадровку для установки ограничений. Ограничения на просмотр bg. bg view's contraints Ограничения на ярлык enter image description here Я также попытался кэшировать высоту ячейки в соответствии с этим вопросом UITableView layout messing up on push segue and return. (iOS 8, Xcode beta 5, Swift), но это не сработает.

//In viewDidLoad 
self.tableView.estimatedRowHeight = 100.0; 
self.tableView.rowHeight = UITableViewAutomaticDimension; 
self.tableView.contentInset = UIEdgeInsetsZero; 

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    float height = [[self.estimatedRowHeightCache objectForKey:[NSString stringWithFormat:@"%ld", indexPath.row]] floatValue]; 
    if (height) { 
     return height; 
    } else { 
     return UITableViewAutomaticDimension; 
    } 

} 
//cache row height. I observed this doesn't been called in first launching in debugging. 
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [self.estimatedRowHeightCache setValue:[NSNumber numberWithFloat:cell.frame.size.height] forKey:[NSString stringWithFormat:@"%ld", indexPath.row]]; 
} 

Благодарим за помощь!

+0

может установить цвет фона для contentView клетки? или задать цвет фона ячейки, или вы уже устанавливаете это и проверяете? –

+0

Я установил цвета фона для каждого вида. contentView: синий; background view: светло-зеленый, который представляет собой представление, добавленное в contentView в качестве фона метки. contentLabel: фиолетовый. – AngleZhou

+0

Вы могли бы поделиться своим кодом, где вы установили эти цвета? Кроме того, вы используете xib? –

ответ

0

Ну, вы не устанавливаете Горизонтальное космическое ограничение для просмотра сверху contentView. Вы устанавливаете только горизонтальное пространственное ограничение для своей метки и ее надзора.

ли это

  1. Выберите вид, который содержит метку
  2. Editor> Pin> Leading Space для SuperView
0

Реализовать DataSource метод для Tableview WillDisplayCell

Или вы можете реализовать в классе ячейки (если это пользовательские ячейки) метод - (Недействительными) awakeFromNib и там установлен каркас клетки.

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