0

У меня проблема с перезагрузкой пользовательского UIView (SBBarChart) внутри ячейки таблицы. Я не использую автозапуск, потому что было слишком сложно настроить все компоненты ячейки, которые могут быть там или нет. Я вручную вычисляю каждый раз прямоугольники и это работает.Просмотр перезаряжается неправильно после вращения

Что касается поворота, я попытался реализовать в контроллере таблицы вид willRotateToInterfaceOrientation с [self.tableView reloadData] внутри. Это снова вызывает клетки после вращения. Хорошо.

Внутри класса ячейки я вызываю [self.barChart setNeedsDisplay], чтобы гарантировать, что подпрограммы диаграммы будут перезагружены, что работает.

Теперь проблема. Первоначально портретный портрет открывается и загружается правильно. Когда я поворачиваюсь в пейзаж, это тоже работает. Когда я поворачиваюсь назад к портрету, длина бара вычисляется правильно, но все же отображается, как это было в ландшафте. Таким образом, новый прямоугольник для панели имеет правильные меры, но панель отображается слишком долго и частично вне экрана.

Ярлык с теми же мерами для кадра отображается (и центрирован) правильно, поэтому это должно быть проблемой перезагрузки планшета.

Что я делаю неправильно?

ответ

0

Я только что решил свою проблему. Я обнаружил три серьезных ошибки в моем коде.

1) Я использовал dequeueReusableCellWithIdentifier после удаления элементов управления из ячеек. Это привело к отсутствию контроля и странному поведению. Теперь я генерирую каждый раз новую ячейку из nib.

2) Я использовал x и y значения элементов управления, которые я удалил из ячейки. Я просто помещаю числовые значения.

3) Я использовал frame для определения ширины экрана. Однако рамка не изменяется. Чтобы решить эту проблему, я использовал следующий поток: How to get orientation-dependent height and width of the screen?

Теперь мне даже не нужна строка [self.barChart setNeedsDisplay], и я могу повернуть устройство столько, сколько захочу, элементы управления больше не меняются. :)

Я все еще не уверен, что мне нужно вызвать reloadData для настройки макета, но я не нашел лучшего решения.

Итак, наконец-то это работает! Большое спасибо за помощь, и я надеюсь, что этот пост поможет кому-то другому. :)

1

проверки [[UIApplication sharedApplication] statusBarOrientation]

при перезагрузке вашего TableView затем настроить соответствующим образом Try. Это даст текущий статус вращения.

+0

Благодарим вас за ответ, но я хочу заполнить ширину экрана гистограммой. Итак, код для диаграммы: 'self.barChart.frame = CGRectMake (20, self.barChart.frame.origin.y, self.frame.size.width - 60, self.barChart.frame.size.height);' , Расчет работает отлично, но прямоугольник остается слишком длинным. Я попробовал '[self.barChart setNeedsDisplayInRect: self.barChart.frame];' не помогает. Для метки я делаю 'self.myLabel.frame = CGRectMake (self.barChart.frame.origin.x, self.barChart.frame.origin.y, self.barChart.frame.size.width, self.barChart.frame .size.height), и это работает. – Antiohia

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