UIWebBrowserView不会跨越整个UIWebView

时间:2014-11-26 22:22:48

标签: ios iphone layout uiwebview

所以我一直试图让这个简单的行为在我的iPhone应用程序上运行一段时间。我的顶部有一个导航栏,底部有一个标签栏。我正在webview中加载我的所有内容,我想在两者之间加入。我已经两次发布过这个问题了,

这里:IOS View still does not load in the correct position

在这里:Programmatically setting content to fill screen between tab bar and nav controller

目前,我的webview看起来并且在iPhone 4和4s上运行良好,问题出现在5s上。当屏幕完成加载时,它看起来像这里的图像:http://grosh.co/screen.jpg。这在模拟器和设备上都会发生。

经过进一步检查,我发现UIWebView实际上正确跨越(您看到的灰色区域是webview)。较小的内容实际上是 UIWebBrowserView ,我很难找到任何信息。

我有我正在使用的代码,以及日志输出以确保所有数字都正确。我的问题是,

1)是否有更好的方法将webview设置为跨越所有设备的顶部和底部栏之间的屏幕区域?

2)如果没有,有没有办法将UIWebBrowser设置为跨越整个webview?

我尝试迭代webview的子视图,如下所述:http://normansoven.com/ios-webview/#.VHyOUr6Jnww但是从未见过webBrowserView。

Teh Codez:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.    


CGFloat viewheight = self.view.bounds.size.height;
NSLog(@"Height1:%f",viewheight);

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat viewheight2 = screenRect.size.height;
NSLog(@"Height2:%f",viewheight2);

CGFloat height = self.view.frame.size.height;
NSLog(@"Height3:%f",height);


CGFloat navBarHeight = self.navigationController.navigationBar.frame.size.height;
NSLog(@"NAVHeight:%f",navBarHeight);

CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
NSLog(@"TABHeight:%f",tabBarHeight);

CGFloat statusbarheight = [UIApplication sharedApplication].statusBarFrame.size.height;
NSLog(@"StatbarHeight:%f",statusbarheight);

CGFloat spaceToRemove = navBarHeight + tabBarHeight + statusbarheight;
    NSLog(@"NAVHeight+TABHeight:%f",spaceToRemove);
CGFloat newHeight = viewheight - spaceToRemove;
        NSLog(@"NewHeight:%f",newHeight);

CGRect frame =  CGRectMake(0 , navBarHeight + statusbarheight, self.view.frame.size.width, newHeight);

self.webView = [[UIWebView alloc]initWithFrame:frame];


//self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];


[self.view addSubview:self.webView];

self.webView.scalesPageToFit = true;
NSURL *url = [NSURL URLWithString:@"http://example.com/finnaRoot/index.php"];
NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestURL];
self.webView.scrollView.showsVerticalScrollIndicator = false;


self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];

self.webView.delegate = self;
self.tabBarController.delegate = self;
self.webView.scrollView.delegate = self;

}

从iPhone 5s输出日志

2014-11-26 17:19:21.184 Finna[14617:1765689] Height1:568.000000
2014-11-26 17:19:21.185 Finna[14617:1765689] Height2:568.000000
2014-11-26 17:19:21.185 Finna[14617:1765689] Height3:568.000000
2014-11-26 17:19:21.185 Finna[14617:1765689] NAVHeight:44.000000
2014-11-26 17:19:21.185 Finna[14617:1765689] TABHeight:49.000000
2014-11-26 17:19:21.185 Finna[14617:1765689] StatbarHeight:20.000000
2014-11-26 17:19:21.185 Finna[14617:1765689] NAVHeight+TABHeight:113.000000
2014-11-26 17:19:21.186 Finna[14617:1765689] NewHeight:455.000000

2 个答案:

答案 0 :(得分:8)

我遇到过同样的问题。 并找到了简单的修复。 罪魁祸首是UIViewController的财产automaticallyAdjustsScrollViewInsetsUIViewController参考说:

  

默认值为YES,允许视图控制器调整其值   滚动视图插入以响应所消耗的屏幕区域   状态栏,导航栏以及工具栏或标签栏。

这意味着即使您正确设置了webview框架或添加了自动布局限制,UIViewController也会将最大差距添加到UIWebView的滚动视图中。要克服这种行为,

  

如果您,请设为NO   想要自己管理滚动视图插入调整,例如何时   视图层次结构中有多个滚动视图。

"管理滚动视图插入调整你的自我" 在我们的上下文中意味着我们不会添加任何插入内容;)

任何滚动视图的问题,即Blank space at top of UITextView in iOS 10 https://stackoverflow.com/search?q=automaticallyAdjustsScrollViewInsets

答案 1 :(得分:4)

这个问题也重新出现在iPhone X上。

对于iOS 11,UIScrollView现在具有属性contentInsetAdjustmentBehavior。

webview.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

可以纠正这个问题。