2015-05-29 1 views
0

Я хочу изменить подвид UITableViewCell «s, когда она является установка в cellForRowAtIndexPath со следующим кодом:изменения Рама подвида вида таблицы ячейки не будет происходить до тех пор мнение не было появляться

cellSubView.center = CGPointZero 

Распечатка координаты кадра показывают, что кадр обновляется успешно, однако представление все еще отображается в позиции, заданной в построителе интерфейса.

Переопределение viewDidAppear функции с помощью следующего кода будет решить эту проблему:

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    self.tableView.reloadData() 
} 

Но это приведет к миганию: представление таблицы уже было появляться, когда я меняю одну позиции подвида в его клеток.

Как можно изменить кадр до вид действительно появился?

+0

Вы использовали AutoLayout? – SolaWing

+0

Если вы используете autoLayout, попробуйте перезагрузить таблицу в методе делегата viewWillLayoutSubviews(). –

+1

Из iOS8 вы действительно не должны настраивать кадр в коде. Изменения кода в кадрах из iOS8 часто игнорируются или изменяются ограничениями, которые система добавляет для вас. Вместо этого вы должны использовать ограничения. Добавьте ограничение для 'cellSubView', которое центрирует его в виде контейнера. –

ответ

1

Если вы использовали autoLayout, проверьте, автоматически ли он создает ограничения. Если да, то вместо этого вы можете изменить константы этих ограничений. Если вы не используете autoLayout, вызовите layoutIfNeeded и посмотрите, не изменит ли это что-либо. Моя ставка, хотя и автоматическая установка автозапуска, создает ограничения.

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