2016-04-12 3 views
4

У меня есть UITableView, который имеет сегментированный элемент управления в своей навигационной панели. Я использую один и тот же вид таблицы, чтобы показать 3 разных набора данных на основе выбранного индекса сегментированного элемента управления. Теперь я пытаюсь сохранить положение прокрутки для каждого сегмента, так что кажется, что есть одна таблица для каждой опции сегмента (т. Е. Результаты каждого выбора имеют независимые позиции прокрутки).Почему UITableView contentOffset изменяется при использовании сегментированного элемента управления?

Чтобы сделать это, я хранение одного CGPoint переменного для каждого состояния, которое устанавливается к contentOffset, когда выбранный индексу изменения сегмента. Переменная используется, чтобы установить смещение содержимого табличного представления при изменении сегмента.

Однако значение индекса contentOffset меняется, если индекс выбранного сегмента изменяется без видимого изменения позиции в таблице. Это похоже на смещение 0-позиции смещения содержимого, что делает мои сохраненные значения неправильными.

Когда мой контроллер содержит следующие методы:

override func viewDidLoad() { 
    // set up the view here...   

    print(tableView.contentOffset) 
} 

@IBAction func selectedSegmentChanged(sender: AnyObject) { 
    print(tableView.contentOffset) 

    // code to change the data shown in the table view... 
} 

Я получаю следующий вход, когда вид нагрузки:

(0,0, 0,0)

, но после изменения сегмент Получаю:

(0,0, -64,0)

Все штаты показывают, что представление таблицы прокручено до того же самого положения, то есть - вверху.

Это поведение мешает мне сохранять положение прокрутки должным образом, так как «значение» смещения содержимого, похоже, меняется.


Edit: содержание смещение фактически корректируется между viewDidLoad() и viewDidAppear(), скорее всего, из-за содержания врезке. Поэтому я теперь сохраняю значение смещения содержимого при первом вызове viewDidAppear().

ответ

4

Эта проблема обычно вызвана свойством на контроллере представления. Установка его на false должна исправить.

self.automaticallyAdjustsScrollViewInsets = false 

Он также может быть установлен с раскадровки. Просто выберите контроллер вида и снимите отметку Adjusts scroll view insets.

+0

Спасибо - когда я отключу опцию _Adjusts Scroll View Insets_, я получаю '(0,0), (0,0)' в журнале, что позволяет предположить, что это устраняет проблему. Однако этот контроллер представления связан с контроллером навигации, поэтому, когда этот параметр отключен, верхний результат в моей таблице скрыт под панелью навигации. Должен ли я вручную устанавливать вставки? –

+0

Либо вы это сделаете, либо измените свою логику, чтобы работать с автоматическими настройками, что бы ни казалось более удобным. – Jelly

+0

Как я могу изменить логику для решения проблемы при сохранении автоматической настройки? Есть ли способ вызвать пересчет 'contentOffset', чтобы я мог разместить его для настройки -64? Или есть способ определить, какой будет корректировка? –

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