2016-06-08 4 views
0

У меня есть пользовательская ячейка представления таблицы, которую я хочу автоматически изменить в зависимости от количества текста в ярлыке.Автоматическое изменение размера пользовательского UITableViewCell

Вот моя камера. Я хочу изменить его размер, чтобы показать весь текст в ярлыке обзора. enter image description here

На мой взгляд таблицы контроллера я использую UITableViewAutomaticDimension

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     if indexPath.section == 0 { 
      if indexPath.row == 0 { 
       return 200 
      } else { 
       return 49 
      } 
     } else if indexPath.section == 1 { 
      return 100 
     } else if indexPath.section == 2 { 
      if indexPath.row == 0 { 
       return 200 
      } else { 
       return 400 
      } 
     } else { 
      return UITableViewAutomaticDimension 
     } 
    } 

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

Это то, что я в конечном итоге с.

enter image description here

+0

Убедитесь, что у вас есть конечный, ведущий, верхний и нижний части содержимого, подключенный к его дочерним представлениям. – genaks

+0

Вы проверили эту статью? http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights – Dominic

+0

Сделайте что-нибудь вроде [link this] (http: // useyourloaf. com/blog/table-view-cells-with-varying-row-height /), это поможет вам –

ответ

0

Убедитесь, что ограничения, установленные для верхних, нижних, задние и ведущих полей к contentView от ребенка UIView или независимо от дочерних элементов у вас есть. Это может помочь вам

enter image description here

В вашем случае, вам нужно будет определить нижний интервал ограничения от ReviewLabel к contentView, чтобы заставить его работать. Верхние, конечные и ведущие поля потребуются также от соответствующих UILabel. Верхнее пространство можно определить из DateLabel, в то время как верхнее и конечное пространства могут быть определены из UIView, содержащего звезды

Почему?

ContentView должен знать о кадре своих дочерних представлений, чтобы на нем работала uitableviewautomaticdimension. Если он не знает об этом Детскую просмотреть кадры, то он не будет знать, что автоматически изменять размер

0

Выполнить вычисления высоты в функции делегата:

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) 
    let size = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 
    return size.height + 1.0 // Add 1.0 for the cell separator height 
} 
0

Вам нужно:

  1. набор для вашей этикетки top, trailing, leading, bottom ограничения на SuperView в IB
  2. набор numberOfLines = 0
  3. набор Content Compression Resistance Priority Vertical и Content Hugging Priority Vertical
  4. набор в коде self.tableView.estimatedRowHeight = MinControlSize;self.tableView.rowHeight = UITableViewAutomaticDimension;

И после набора текста вызова этого

cell.setNeedsDisplay(); 
cell.layoutIfNeeded(); 

в методе делегата

optional func tableView(_ tableView: UITableView, 
heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 

Надеется, что это поможет. Я взял это из примера Self Sizing из Apple

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