2014-11-26 3 views
5

Так что я пытаюсь получить это простое поведение, работая над моим iPhone-приложением некоторое время. У меня есть панель навигации наверху и панель вкладок внизу. Я загружаю весь свой контент в веб-просмотр, который я хочу установить между ними. Я отправил по этому вопросу уже дважды,UIWebBrowserView не охватывает весь UIWebView

как здесь: 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 на самом деле правильно работает (серые области, которые вы видите, являются веб-просмотром). Меньший контент на самом деле является UIWebBrowserView, с которым мне сложно найти информацию.

У меня есть код, который я использую ниже, а также вывод журнала для обеспечения правильности всех номеров. Мои вопросы:

1) Есть ли лучший способ настроить веб-просмотр для охвата области экрана между верхними и нижними столбцами для всех устройств?

2) Если нет, существует ли способ установить UIWebBrowser для охвата всего веб-представления?

Я попытался выполнить итерацию по подземельям 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

Так что последнее обновление iOS исправило эту проблему, что заставило меня поверить, что это была ошибка. Я добавлю обходной код, который я использовал ниже, когда получаю шанс. Это сработало, и приложение было принято в магазин. – Voltron

ответ

6

Я столкнулся с той же проблемой. И нашел простое исправление. Претендент UIViewController 's automaticallyAdjustsScrollViewInsets. UIViewController ссылка говорит:

По умолчанию значения YES, что позволяет контроллеру вида корректировать свою прокрутки просмотр врезку в ответ на экране области, потребленных в строке состояния , панель навигации и панель инструментов или панель вкладок.

Это означает, что UIViewController добавляет, что верхний зазор в целях прокрутки UIWebView «s, даже если вы правильно настроить Webview рамку или добавить autolayout ограничений. Чтобы преодолеть это поведение только

Набор для NO если вы хотите управлять вид прокрутки углубленные настройки самостоятельно, например, когда есть больше чем один вид прокрутки в иерархии представлений.

«управлять коррективы вид прокрутки подцепите я» в нашем контексте означает, что мы не будем добавлять врезки;)

же проблема с любым видом прокрутки, т.е. Blank space at top of UITextView in iOS 10 https://stackoverflow.com/search?q=automaticallyAdjustsScrollViewInsets

2

Эта проблема также появилась на iPhone X.

С iOS 11 UIScrollView теперь имеет свойство contentInsetAdjustmentBehavior.

webview.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

может исправить эту проблему.

+0

Разработал отлично подходит для меня, но требуется дополнительная упаковка с @available: если (@available (IOS 11,0, *)) { self.webView.scrollView .contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } – BPH

Смежные вопросы