2015-02-25 3 views
0

У меня есть контроллер вида, который имеет UITableView, который закрывает нижнюю половину контроллера. У меня есть кнопка в заголовке верхнего раздела, которая позволяет пользователю минимизировать или максимизировать UITableView. Когда кнопка нажата, y-компонент позиции UITableView изменяется так, что UITableView, по-видимому, сводится к минимуму в нижней части экрана. Когда кнопка нажата, когда UITableView находится в сводном состоянии, позиция y UIableView возвращается в исходное значение. Как максимизация, так и минимизация UITableView анимированы для обеспечения плавного перехода между открытым и закрытым состояниями UITableView.iOS - Сброс позиции UITableView при представлении контроллера

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

Вот как я определил мой UITableView как свойство:

@property (nonatomic, strong) IBOutlet UITableView *reviewTable; 

Вот как я минимизировать/максимизировать мой вид таблицы:

- (IBAction)btnExpandCompress:(id)sender 
{ 
    UIImage *downImage = [UIImage imageNamed:@"arrowDown.png"]; 
    UIImage *upImage = [UIImage imageNamed:@"arrowUp.png"]; 
    UIButton *btnExpandCompress = (UIButton *)sender; 
    [btnExpandCompress setEnabled:NO]; 

    //global flag to tell if the table view is maximized or minimized 
    if (showingReviews) 
    { 
     [UIView animateWithDuration:0.7 animations:^{ 
      CGRect frame = reviewTable.frame; 
      frame.origin.y += reviewTable.frame.size.height - 30; 
      reviewTable.frame = frame; 
     } completion:^(BOOL finished) { 
      showingReviews = NO; 
      [btnExpandCompress setEnabled:YES]; 
      [btnExpandCompress setBackgroundImage:upImage forState:UIControlStateNormal]; 
     }]; 
    } 
    else 
    { 
     [UIView animateWithDuration:0.7 animations:^{ 
      CGRect frame = reviewTable.frame; 
      frame.origin.y -= reviewTable.frame.size.height - 30; 
      reviewTable.frame = frame; 
     } completion:^(BOOL finished) { 
      showingReviews = YES; 
      [btnExpandCompress setEnabled:YES]; 
      [btnExpandCompress setBackgroundImage:downImage forState:UIControlStateNormal]; 
     }]; 
    } 
} 

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

+0

каждый думает отлично работает с вышеуказанным кодом, я думаю, что u переопределяет 'viewDidAppear' или' viewWillAppear' в veiewcontroller содержит tableview ..? –

+0

Я не переопределял ни один из этих методов. Есть ли что-нибудь еще, что может быть[email protected] – ScottOBot

+0

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

ответ

0

Итак, выяснилось, что причина, по которой UITableView возвращалась в исходное положение, была связана с проблемами, связанными с автоматической компоновкой. Когда я отключил автоматическую компоновку в файле раскадровки, UITableView вел себя правильно. Это вызвало ряд других проблем в пользовательском интерфейсе моего приложения, поэтому я решил отключить автоматический макет только для рассматриваемого UITableView. Это работало, а вот код, я использовал, чтобы сделать это:

//This disables autolayout for myTableView 
myTableView.translatesAutoresizingMaskIntoConstraints = YES; 

Прокоментируй, если есть какие-либо проблемы с моим решением, которое я упускать из виду. Если нет, я буду принимать этот ответ, поскольку он, похоже, решил мою проблему.

0

Как я не могу комментировать, я должен добавить это как ответ.

Открыть storyboard->View Controller(Which has the table view)-> View контроллера View.

Внутри этой точки зрения, если Tableview сначала в иерархии вид из сверху, вид таблицы клетки смещаются вниз до высоты навигационной панели.

Надеюсь, это поможет!