Определить размер финального макета для просмотра с гибкой шириной в 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 вы сможете увидеть ширину при вызове каждого метода.

  • TransitionFromView удаляет предыдущий вид
  • Постоянные данные в Swift
  • Переход на один вид UIView
  • Как создать NSIndexPath для TableView
  • Каков наилучший способ отобразить переменное количество изображений в TableViewCell в файле xib?
  • отфильтруйте атрибуты CoreData до уникальных и покажите их в UITableView
  • Показать MKMapView в UITableViewCell без замедления интерфейса
  • Повторное использование ячейки ... :(
  • Как я могу прокручивать ячейки UITableView?
  • Несколько столбцов для UITableView в iOS
  • Проблема повторного использования UItableviewcell в ios
  • Interesting Posts

    AutoLayout с размерами: различные интервалы в зависимости от размера экрана iPhone

    Swift: анимация UIBezierPath для инсульта из центра

    Как обновить другие контроллеры представлений на основе действия из базового представления

    iOS – обновление потока пользователей без обновления приложения

    Индивидуальный просмотр фотографий

    BreakPoints не работают в Swift в Xcode 6.3

    Как найти конкретный день месяца?

    Размер экрана / размер в правой части экрана iOS 8, но неправильный в iOS 9 на одном устройстве

    Недействительность NSTimer в dealloc

    NSURLSession didReceiveChallenge только один раз

    SLComposeViewController CompletionHandler

    Получение пользовательского SuperView в событии касания?

    Как можно установить каталог личных документов в iOS8, поскольку расширение приложения поставщика хранилища делает каталог документов по умолчанию «Общий»?

    Тип «TimeZone» не имеет локального члена в Swift3

    Как я могу импортировать File.swift в ViewController.h и наоборот?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.