所以我一直试图让这个简单的行为在我的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
答案 0 :(得分:8)
我遇到过同样的问题。
并找到了简单的修复。
罪魁祸首是UIViewController
的财产automaticallyAdjustsScrollViewInsets
。 UIViewController
参考说:
默认值为
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;
可以纠正这个问题。