2013-09-26 4 views
14

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

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

Как я могу получить начальную позицию, которая будет полностью прокручена вверху, включая вставку?

+2

Это все еще проблема в 7.0.4, и ни одно из приведенных ниже рекомендаций не исправляет это. Любые другие идеи? – Axeva

ответ

1

использование ниже

CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame]; 
CGFloat navHeight = self.navigationController.navigationBar.frame.size.height; 
applicationFrame.origin.y = navHeight + 4; 
webView = [[UIWebView alloc] initWithFrame:applicationFrame]; 
12

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

self.navigationController.navigationBar.translucent = NO; 

После этого положение кадра будет соответствовать тому же поведению, что и iOS6, магически!

+4

Определенно работает. Однако мне бы хотелось увидеть поведение UITableViewController, которое будет доступно в UIViewController, содержащем UIWebView. –

4

Способ, которым я решил эту проблему, связан с обратным вызовом делегата 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]; 
5

Ответ Рика правильный, за исключением того, что верхнее значение должно быть отрицательным, это то, что сработало для меня!

[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.

+0

Значение должно быть положительным. 44 или 64. –

1

Вы можете также установить содержание смещение Scrollview в WebView в viewDidAppear:, например:

[self.webView.scrollView setContentOffset:CGPointMake(0, -64) animated:NO]; 

К сожалению, это не имеет никакого эффекта, если поместить в viewWillAppear:, поэтому, когда появляется вид вы увидите видимый скачок в содержании, когда он сдвигается из-под навигационной панели в новое место.

3

У меня была такая же проблема и исправлена. Решение довольно просто:

Перейти к раскадровке, выбрать контроллер вида, который содержит ваш UIWebView, и открыть инспектор атрибутов. Здесь вы увидите заголовок «Extend Edges», просто снимите флажок «Under Top Bars», и я буду работать!

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

+0

Не совсем то, о чем я прошу.Это возвращается к поведению pre iOS7, где границы веб-представления начинаются с (0, navbarheight). –

0

Мое решение:

- (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; 
} 
0

Для более общего варианта ответа @ Пуран, а не Электромонтаж 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]; 
} 
Смежные вопросы