Определить размер финального макета для просмотра с гибкой шириной в UITableViewCell

Я использую классы размера в приложении только для iOS 8, и у меня есть представление внутри UITableViewCell с гибкой шириной. Его ограничения автоматического макета определяются следующим образом:

введите описание изображения здесь

Как вы можете видеть, его ширина варьируется в зависимости от ширины / ориентации устройства.

Когда я печатаю его фрейм в cellForRowAtIndexPath я вижу (180.0, 10.0, 400.0, 60.0), который показывает ширину 400 . Но когда я измеряю представление в симуляторе, его ширина составляет всего 175 , что подкрепляется тем фактом, что контент моего представления усечен (я рисую в нем что-то внутри).

Как я могу узнать, когда UITableViewCell и подпрограммы UITableViewCell полностью выполнены, чтобы я мог перерисовывать вещи внутри моего представления?

Обновить

В cellForRowAtIndexPath я делаю следующее, чтобы получить ячейку:

 let cell = tableView.dequeueReusableCellWithIdentifier("TimeTypeCell", forIndexPath: indexPath) as! TimeTypeCell let customField = customFields[indexPath.row] cell.fieldNameLabel.text = customField["name"] as? String cell.fieldValueLabel.text = customField["total"] as? String cell.graphData = customField["totalGraph"] as! [Double] cell.fieldGraph.dataSource = cell.self cell.fieldGraph.delegate = cell.self cell.fieldGraph.reloadData() //This is where the redrawing happens 

3 Solutions collect form web for “Определить размер финального макета для просмотра с гибкой шириной в UITableViewCell”

Вызовите cell.contentView.layoutIfNeeded() чтобы правильно cell.contentView.layoutIfNeeded() представления контента. В то время как сама ячейка должна быть правильного размера при tableView.dequeueReusableCellWithIdentifier(_, forIndexPath:) из tableView.dequeueReusableCellWithIdentifier(_, forIndexPath:) , кажется, что представление содержимого не сразу запускает макет, поэтому вам нужно вызвать его вручную, если вам нужно его обновить на это пункт.

Я закончил с переопределением метода UITableViewCell.layoutSubviews :

 - (void)layoutSubviews { [super layoutSubviews]; [self.contentView layoutSubviews]; // this does the trick } 

Вам нужно либо проверить ширину в viewWillLayoutSubviews либо viewDidLayoutSubviews .

Если вы поместите println(self.tableView.frame.width) в viewDidLoad , viewWillAppear , viewDidAppear , viewWillLayoutSubviews и viewDidLayoutSubviews вы сможете увидеть ширину при вызове каждого метода.

  • Изменить UIViewController на UITableViewController внутри раскадровки?
  • я хочу, чтобы динамическая общая высота uitableview, а не uitableviewcell,
  • iOS 7 - UITableViewController с поиском находится в строке состояния
  • как загрузить два изображения из url в пользовательской ячейке UItableview
  • Вкладка заголовка раздела UITableView отсутствует
  • UITableView внутри интерфейса UICollectionView.
  • UITextViews в ошибке обнаружения ссылок UITableView в iOS 7
  • Динамическая высота UITableViewCell не работает с классами размера
  • Изменение содержимого ячейки в UITableView при прослушивании
  • Изображение ячейки в UITableView не отображается до тех пор, пока не будет выбран
  • UITableView reloadData не перезагружается
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.