Начальная позиция прокрутки iOS7 в навигационной панели
У меня есть веб-просмотр, который прокручивается по желанию под панелью навигации.
Однако, когда я сначала загружаю контроллер, страница, загруженная в веб-просмотр, прокручивается так, что она выравнивается с верхней частью панели навигации. Когда я просматриваю веб-представление, правильная вставка присутствует сверху, чтобы сидеть правильно, это только неправильное исходное положение.
Как я могу получить начальную позицию для полной прокрутки вверху, включая вставку?
Ответы
Ответ 1
Если вы не против иметь непрозрачную панель навигации, самым простым решением может быть это в контроллере представления, который содержит ваш веб-просмотр:
self.navigationController.navigationBar.translucent = NO;
Позиционирование фрейма будет тогда принимать то же поведение, что и iOS6, волшебным образом!
Ответ 2
Ответ Рика правильный, за исключением того, что верхнее значение должно быть отрицательным, это то, что сработало для меня!
[self.webView.scrollView setContentInset:UIEdgeInsetsMake(-44, 0, 0, 0)];
[self.webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(-44, 0, 0, 0)];
[self.webView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
Я использовал -44, если у вас нет строки состояния сверху, вы должны использовать -64.
Ответ 3
Как я решил эту проблему, с обратным вызовом делегата webViewDidFinishLoad. В методе обратного вызова для веб-представления, который я установил, сделайте всю работу, чтобы сделать вид прокрутки веб-представления правильным.
[webView.scrollView setContentInset:UIEdgeInsetsMake(64, 0, 0, 0)];
[webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(64, 0, 0, 0)];
[webView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
Ответ 4
У меня была такая же проблема и исправлена. Решение довольно просто:
Перейдите в раскадровку, выберите контроллер представления, содержащий ваш UIWebView, и откройте Инспектор атрибутов. Здесь вы увидите заголовок "Extend Edges", просто снимите флажок "Under Top Bars", и я буду работать!
Надеюсь, это поможет!
Ответ 5
используйте ниже
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
CGFloat navHeight = self.navigationController.navigationBar.frame.size.height;
applicationFrame.origin.y = navHeight + 4;
webView = [[UIWebView alloc] initWithFrame:applicationFrame];
Ответ 6
Вы также можете установить смещение содержимого прокрутки webview в viewDidAppear:
, например:
[self.webView.scrollView setContentOffset:CGPointMake(0, -64) animated:NO];
К сожалению, он не имеет никакого эффекта, если помещен в viewWillAppear:
, поэтому, когда появится представление, вы увидите видимый прыжок в содержимом, когда он сдвинется из-под навигационной панели в новое место.
Ответ 7
Мое решение:
- (void)loadView {
...
_offsetSet = NO;
}
- (void) viewDidLayoutSubviews {
if (!_offsetSet) {
[_webView.scrollView setContentOffset:CGPointMake(0, -self.topLayoutGuide.length) animated:NO];
}
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
_offsetSet = YES;
}
Ответ 8
Для более общей версии ответа @Puran, а не аппаратного 44 или 64, получите его из topLayoutGuide. Кроме того, если вы загружаете несколько раз, вам нужно только один раз изменить эти значения:
UIEdgeInsets insets = self.myWebView.scrollView.contentInset;
if ( UIEdgeInsetsEqualToEdgeInsets(insets, UIEdgeInsetsZero)) {
insets.top = -self.topLayoutGuide.length;
[self.myWebView.scrollView setContentInset:insets];
[self.myWebView.scrollView setScrollIndicatorInsets:insets];
[self.myWebView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
}