我正在开发一个浏览器应用程序,UIWebView 上方有一个地址栏。在 MobileSafari 中,如果向下滚动,地址栏开始向上移动,超出屏幕,而 UIWebView 不会滚动。只有当地址栏完全消失时,它才开始滚动。我也希望在我的应用程序中实现这种效果。
最好的实现方式是什么?
谢谢
最好的实现方式是什么?
谢谢
实现该功能的唯一方法需要 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
}
有一种方法,但我不确定它是否有点过于hacky。首先在webview中搜索scrollview,然后更改contentInset,最后将searchbar(例如)添加到scrollview中。以下代码仅为示例,我没有正确设置任何框架,40只是searchbar的虚构高度。我不确定这是否适用于每个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];
}
}
(UIScrollView*)[myWebView.subviews objectAtIndex:0].scrollEnabled = NO;
[scrollview addObserver:self forKeyPath:@"contentOffset"
options:NSKeyValueObservingOptionNew context:nil];
您可以在以下网址找到有关NSKeyValueObserving协议的更多文档: