2015-05-10 3 views
0

У меня есть UITableView внутри container view. Я пытаюсь применить auto-layout к cells в tableView. Например: у меня есть 3 cells. Первый и последний должны иметь высоту набора (скажем, 25), а средняя - динамическая, основанная на высоте view's. (tableView находится в container view.)Применить автоматический макет к UITableViewCell на основе его родительского представления

Я пробовал использовать auto-layout, но это не позволило мне применить его. Я не могу использовать heightForRow..., потому что высота views изменяется при изменении ориентации iPhone.

Мой вопрос: как я могу применить auto-layout к ячейке?

+0

Вы можете разместить снимок экрана изображение, которое вы хотите для того чтобы достигнуть –

ответ

1

Чтобы добавить поддержку динамического размера ячейки, выполните следующие действия:

1) Добавьте соответствующие ограничения в ячейку, то есть не устанавливайте фиксированную высоту для любого из видов и не добавляйте ограничения для верхнего и нижнего пространства.

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

2) Добавьте эти две строки в viewDidLoad метода:

tableView.estimatedRowHeight = tableView.rowHeight 
tableView.rowHeight = UITableViewAutomaticDimension 
+0

В шаге 1 вы имеете в виду дополнительные ограничения для tableView? Потому что я не могу добавить ограничения для ячейки. – Jessica

+0

Нет, я имею в виду камеру. Вы используете раскадровки или код? – Yariv

+0

using раскадровка – Jessica

0

Вы не можете изменить высоту ячеек с автоматической компоновкой !!! только с heightforrow... вы можете изменить его! сначала добавьте var size:SGSize! в свой код. затем добавить этот код для просмотра сделал метод загрузки, чтобы создать уведомление ориентации:

UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("orientationChanged:"), name: UIDeviceOrientationDidChangeNotification, object: UIDevice.currentDevice()) 
size = view.frame.size 

затем добавить эту функцию в код:

func orientationChanged(note: NSNotification) { 
     var device: UIDevice = note.object as UIDevice 
     switch(device.orientation){ 
     case UIDeviceOrientation.Portrait: 
      size = view.frame.height 
      tableView.reloadData() 
     case UIDeviceOrientation.LandscapeLeft: 
      size = view.frame.width 
      tableView.reloadData() 
     case UIDeviceOrientation.LandscapeRight: 
      size = view.frame.width 
      tableView.reloadData() 
     default: 
      break 
     } 
    } 

в конце установить высоту ячейки в

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     if (indexPath.section == 0 || indexPath.section == 2) { 
       return 25 

     } 
     else 
     { 
      return size.height 
     } 
    } 
+0

Что лучше (или быстрее), чтобы делать то, что вы написали в ответ , или вставить его в 'viewWillTransitionToSize'? – Jessica

+0

Это неправда! При правильной настройке макет автоматически расширяет высоту ячейки. Посмотрите на мой ответ – Yariv

+0

viewWillTransitionToSize быстрее! – mobin

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