iphone: вид поверх UIWebView? - PullRequest
       18

iphone: вид поверх UIWebView?

7 голосов
/ 23 февраля 2011

Я работаю над браузерным приложением, и у меня есть адресная строка поверх UIWebView.На MobileSafari при прокрутке вниз адресная строка начинает перемещаться вверх, за пределы экрана, и UIWebView не прокручивается.Только когда адресная строка полностью исчезает, она начинает прокручиваться.Я бы хотел, чтобы этот эффект был и в моем приложении.

Какой лучший способ реализовать это?

Спасибо

Ответы [ 4 ]

15 голосов
/ 01 октября 2011

Единственный способ реализовать это - iOS 5. В iOS 5 UIWebView имеет подпредставление UIScrollView.

И используйте следующий код:

Установите область для адресной строки:

[[myWebView scrollView] setContentInset:UIEdgeInsetsMake(64, 0, 0, 0)];

Перемещение адресной строки с использованием делегата scrollview:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

        if(scrollView.contentOffset.y>=-64&&scrollView.contentOffset.y<30)
        {
            topBar.frame=CGRectMake(0,-44-scrollView.contentOffset.y, 320, 44);

        }
        else if(scrollView.contentOffset.y<-64)
            topBar.frame=CGRectMake(0,20, 320, 44);//Lock the position
}
4 голосов
/ 26 февраля 2011

Есть способ, но я не уверен, что он слишком хакерский.Сначала найдите представление прокрутки в веб-просмотре, затем измените contentInset и, наконец, добавьте панель поиска (например) в представление прокрутки.Следующий код является просто примером, я не правильно установил какие-либо кадры, а 40 - это просто выдуманная высота для панели поиска.Я не уверен, будет ли это работать в каждой версии iOS.

UIWebView * myWebView = [[UIWebView alloc] init]
UISearchBar * mySearchBar = [[UISearchBar alloc] init];
for (NSObject * aSubView in [myWebView subviews]) {
   if ([aSubView isKindOfClass:[UIScrollView class]]) {
      UIScrollView * theScrollView = (UIScrollView *)aSubView;
      theScrollView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0);
      [theScrollView addSubview:mySearchBar];
   }
}
0 голосов
/ 22 февраля 2012

Решение PeakJi работает, но немного запаздывает. Лучшим решением было бы добавить наблюдателя к смещению содержимого UIScrollView, что-то вроде

[scrollview addObserver:self forKeyPath:@"contentOffset" 
                                    options:NSKeyValueObservingOptionNew context:nil];

Дополнительную информацию о протоколе NSKeyValueObserving можно найти по адресу

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html

0 голосов
/ 28 сентября 2011

Если подумать, это просто прокручиваемое представление с адресной строкой, застрявшей сверху, и веб-представление и панель всегда перемещаются вместе.Теперь предположим, что вы создали представление прокрутки и добавили два подпредставления, адресную строку и веб-представление (одно под другим).Следует отметить, что высота веб-представления определяется и фиксируется после загрузки страницы (в webViewDidFinishLoad:).

Следовательно, это просто представление с прокруткой, contentSize которого равно высотебара + высота веб-просмотра.Теперь по умолчанию веб-представление допускает прокрутку, поскольку оно имеет вид прокрутки в качестве подпредставления.Поскольку прокруткой должно быть только внешнее представление прокрутки, необходимо, чтобы прокрутка веб-представления была отключена.Для этого извлеките первое подпредставление (это представление прокрутки) и отключите его прокрутку, используя:

(UIScrollView*)[myWebView.subviews objectAtIndex:0].scrollEnabled = NO;
...