IOS UITableView contentOffSet больше не скрывает заголовок при возврате из расширенного представления подробностей - PullRequest
6 голосов
/ 26 мая 2011

Я использую код ниже в корневом контроллере представления, чтобы скрыть заголовок UITableView (заголовок имеет панель UISearch). Это работает, когда приложение запускается и отображает tableView. Однако впоследствии, когда строка выбрана, подробное представление перемещается, и пользователь открывает подробное представление, заголовок uitableview теперь виден в корневом представлении, которое не что я ожидал.

Вот соответствующие функции:

- (void) viewWillAppear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:YES animated:animated];
    [super viewWillAppear:animated];
    self.tableView.contentOffset 
     = CGPointMake(0, self.tableView.tableHeaderView.frame.size.height);
    //it's as if the line above is ignored on when returning from a pushed detail view    
}

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // theContentOffSet works when I put it hear, but then the user can see it which is not desired    
}

Строка '[self.navigationController setNavigationBarHidden: YES animated: animated];' безусловно, является частью проблемы, так как без него код работает и заголовок tableView прокручивается вне поля зрения. Однако для корневого представления требуется, чтобы панель навигации была скрыта, но отображалась в подробном представлении.

Ответы [ 2 ]

16 голосов
/ 12 июня 2011

Посмотрев некоторое время, я нашел следующий пост https://devforums.apple.com/message/315519#315519, который решает эту проблему.

-(void)viewWillAppear:(BOOL)animated
{
    [self performSelector:@selector(updateContentOffset) withObject:nil afterDelay:0.0];
}

- (void)updateContentOffset
{
    self.tableView.contentOffset = CGPointMake(0, savedContentOffsetY);
}

Конечно, в viewWillDisappear вы можете сохранить смещение содержимого следующим образом:

savedContentOffsetY = self.tableView.contentOffset.y;

А у тебя viewDidLoad,

savedContentOffsetY = self.tableView.tableHeaderView.frame.size.height;
1 голос
/ 02 сентября 2015

Я искал и много пробовал, но ничего не помогало.Наконец, следующий код помог мне.Вы можете добавить код в свой метод viewDidLoad ():

self.edgesForExtendedLayout = UIRectEdgeNone;
...