2014-11-26 3 views
5

Also habe ich versucht, dieses einfache Verhalten jetzt für eine Weile auf meiner iPhone App zu arbeiten. Ich habe oben eine Navigationsleiste und unten eine Tableiste. Ich lade alle meine Inhalte in eine Webansicht, die ich zwischen die beiden passe. Ich habe schon zweimal über dieses Thema geschrieben,UIWebBrowserView erstreckt sich nicht über das gesamte UIWebView

hier beides: IOS View still does not load in the correct position

und hier: Programmatically setting content to fill screen between tab bar and nav controller

Derzeit meine webview sieht und führt auf dem iPhone 4 und 4s in Ordnung, das Problem auf dem 5s entsteht. Wenn der Bildschirm geladen ist, sieht es wie das Bild hier aus: http://grosh.co/screen.jpg. Dies geschieht sowohl auf dem Simulator als auch auf Geräten.

Bei weiterer Überprüfung entdeckte ich, dass die UIWebView in der Tat korrekt überspannt (die grauen Bereiche, die Sie sehen, sind die Webansicht). Der kleinere Inhalt ist eigentlich ein UIWebBrowserView, auf dem ich eine harte Zeit habe, irgendwelche Informationen auf zu finden.

Ich habe den Code, den ich unten verwende, sowie eine Protokollausgabe, um sicherzustellen, dass alle Zahlen korrekt sind. Meine Fragen sind,

1) Gibt es eine bessere Möglichkeit, das Webview den Bildschirmbereich zwischen den oberen und unteren Balken für alle Geräte zu überspannen?

2) Wenn nicht, gibt es eine Möglichkeit, den UIWebBrowser so einzurichten, dass er die gesamte Webansicht umfasst?

Ich habe versucht, über die Subviews der Webview wie hier beschrieben zu iterieren: http://normansoven.com/ios-webview/#.VHyOUr6Jnww aber die WebBrowserView wurde nie gesehen.

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; 

} 

Log-Ausgang, von einem 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

Also das neueste iOS-Update behoben dieses Problem, die mich zu glauben, dass es ein Bug war. Ich werde den Umgehungscode hinzufügen, den ich unten verwendet habe, wenn ich eine Chance bekomme. Es funktionierte und die App wurde in den Laden angenommen. – Voltron

Antwort

6

Ich habe mit dem gleichen Problem begegnet. Und gefundene einfache Lösung. Der Schuldige ist UIViewController 's Eigentum automaticallyAdjustsScrollViewInsets. UIViewController Referenz sagt:

Der Standardwert ist YES, die die View-Controller ermöglicht es seinen Scroll Ansicht Einsätze als Reaktion auf die Bildbereiche durch die Statusleiste, Navigationsleiste und Symbolleiste oder Tab-Leiste verbraucht einzustellen.

Es bedeutet, dass UIViewController fügt hinzu, dass Top-Lücke zu UIWebView ‚s Ansicht blättern, auch wenn Sie richtig webview Rahmen oder fügen automatische Layout Einschränkungen einrichten. Zur Überwindung dieses Verhalten nur

Set NO wenn Sie wollen Ansicht blättern Einsatz Anpassungen selbst, wie zu verwalten, wenn mehr als eine Scroll-Ansicht in der Ansichtshierarchie ist.

in unserem Kontext bedeutet "scroll Ansicht Einsatz Anpassungen, um sich selbst verwalten," dass wir keine Einsätze hinzufügen;)

gleiche Problem mit jeder Scroll-Ansicht, dh Blank space at top of UITextView in iOS 10 https://stackoverflow.com/search?q=automaticallyAdjustsScrollViewInsets

2

Dieses Problem ist auch mit iPhone X wieder aufgetaucht.

Mit iOS 11 hat UIScrollView jetzt die Eigenschaft contentInsetAdjustmentBehavior.

webview.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

kann dieses Problem beheben.

+0

groß für mich gearbeitet, aber benötigt eine zusätzliche Umhüllung mit @available: if (@available (iOS 11.0 *)) { self.webView.scrollView .contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } – BPH

Verwandte Themen