#iphone #ios #uitableview #header #hidden
#iPhone #iOS #uitableview #заголовок #скрыто
Вопрос:
Я использую приведенный ниже код в контроллере корневого представления, чтобы скрыть заголовок UITableView (в заголовке есть панель пользовательского поиска). Это работает, когда приложение запускается и отображает 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: анимированный];’, безусловно, является частью проблемы, поскольку без нее код работает, и заголовок TableView прокручивается вне поля зрения. Однако для корневого представления требуется, чтобы панель навигации была скрыта, но отображалась в подробном представлении.
Ответ №1:
Некоторое время осмотревшись, я нашел следующий пост 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. строка кода, которая у вас есть для viewDidLoad, должна быть «savedContentOffsetY», верно? В противном случае этот код выглядит великолепно, я приму его в качестве ответа, как только смогу его опробовать.
2. Хорошая находка, Камчатка. Похоже, что ‘performSelector’ позволяет обойти некоторые временные проблемы с анимацией, которые у вас есть с viewWillAppear
3. Спасибо, что заметили опечатку, теперь исправлена.
Ответ №2:
У меня есть поиск, и я много пробовал, но ничего не помогло. Наконец, следующий код помог мне. Вы можете добавить код в свой метод viewDidLoad ():
self.edgesForExtendedLayout = UIRectEdgeNone;