在启动应用程序时无法检测设备的方向以创建具有正确大小的 UIWebView
Posted
技术标签:
【中文标题】在启动应用程序时无法检测设备的方向以创建具有正确大小的 UIWebView【英文标题】:Can't detect orientation of device at launching app to create UIWebView with correct size 【发布时间】:2016-01-21 16:45:50 【问题描述】:如果我启动我的应用程序,我想知道我的设备的方向。
在我的主要view controller
中,我有一个UIWebView
,我以编程方式将其添加到主要view controller
。
我使用(int)[[UIApplication sharedApplication] statusBarOrientation]
对其进行了测试,但我只得到了数字 1。无论我的设备是纵向还是横向。
我想设置我的UIWebView
的大小,但如果我不知道方向如何设置它的大小?
2016-01-21 17:21:45.387 iPhoneApp[1026:151720] 0) Orientation: 1
2016-01-21 17:21:45.388 iPhoneApp[1026:151720] 0) Orientation: 0
2016-01-21 17:21:45.393 iPhoneApp[1026:151720] 1) Orientation: 1
2016-01-21 17:21:45.393 iPhoneApp[1026:151720] 1) Orientation: 0
2016-01-21 17:21:45.406 iPhoneApp[1026:151720] 2) Orientation: 1
2016-01-21 17:21:45.406 iPhoneApp[1026:151720] 2) Orientation: 1
2016-01-21 17:21:45.417 iPhoneApp[1026:151720] 3) Orientation: 1
2016-01-21 17:21:45.417 iPhoneApp[1026:151720] 3) Orientation: 1
0 在didFinishLaunchingWithOptions
1 在viewDidLoad
2 在viewDidAppear
3 在我创建UIWebView
的方法中
NSLog(@"3) Orientation: %d", (int)[[UIApplication sharedApplication] statusBarOrientation]);
NSLog(@"3) Orientation: %d", (int)[[UIDevice currentDevice] orientation]);
这始终是我的日志顺序。
我创建UIWebView
的方法看起来像
-(void)createWebView
//NSLog(@"createWebView");
//NSLog(@"orientation: %d", [[self orientNr] intValue]);
[self destroyWebView];
NSLog(@"3) Orientation: %d", (int)[[UIApplication sharedApplication] statusBarOrientation]);
NSLog(@"3) Orientation: %d", (int)[[UIDevice currentDevice] orientation]);
if( ([self firstLoad] && [[self orientNr] isEqualToNumber:[[NSNumber alloc] initWithInt:2]]) ||
([self firstLoad] && [[self orientNr] isEqualToNumber:[[NSNumber alloc] initWithInt:1]] && UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])))
[self setWebView:[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)]];
else
[self setWebView:[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]];
dispatch_async(dispatch_get_main_queue(), ^
[[self view] addSubview:[self webView]];
);
[[self webView] setScalesPageToFit:YES];
[[self webView] setDelegate:self];
[[self webView] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[[self view] setAutoresizesSubviews:YES];
//NSLog(@"iPhoneApp: %@", [self webView]);
变量firstLoad
检查应用程序是否已启动。 orientNr
是将应用程序旋转到我想要的给定方向的数字,对于解决方案并不重要(1 是设备,2 是横向)。 webView
的类型为 UIWebView
。
因此,如果我以纵向启动应用程序和设备,我想创建宽度为 320 和高度为 568 的 webView
。如果它是在横向启动时,我想创建宽度为 568 和高度为 320 的 webView
。
我的问题是在启动时检测设备的方向。我还搜索并找到了一些线程,例如(Get launch orientation of iPad app 或 ios: Device orientation on load),但它并没有解决我的问题
编辑:
只有当我的设备处于横向模式或UIWebView
应该在启动应用程序时以横向模式启动时才会发生这种情况
编辑 2:
问题解决了。我只加了
-(void)viewDidLayoutSubviews
[super viewDidLayoutSubviews];
[[self webView] setFrame:[[self view] bounds]];
我的UIWebView
的大小始终与我的UIView
相同。在横向也是。
这里的答案(https://***.com/a/24398249/5629933)解决了我的问题。我是 Objective-C 的新手,但尽管我在创建 UIWebView
时将其大小设置为与 UIView
相同,但这样做有意义吗?
【问题讨论】:
您正在做的某些事情太早了,这就是为什么您会得到无用的结果。但是您根本不需要知道设备的方向。使用自动布局定位您的 Web 视图。这样,无论发生什么,它都会处于正确的位置。 嗯,我明白了,但是尺寸设置不正确。如果您可以在我的方法中看到我创建web view
的位置,那么它的大小始终是 320 宽和 568 高。想象一下,如果此视图的方向设置为横向,我的 web view
方向正确,但尺寸不适合整个屏幕。如果我的设备处于横向模式,同样的问题只是我的网站大小不适合整个屏幕,因为我的 UIView
的宽度始终是 320 宽度和 568 高度 @matt。我该如何解决?
那张截图毫无意义。其中哪一部分是self.view
?其中哪一部分应该是网络视图?页面加载到 Web 视图中的部分是什么?
@rmaddy 我添加了另一个屏幕截图。我的web view
在左侧,内容(句子)。它应该填满整个屏幕截图,而不仅仅是一半
那个屏幕截图更糟糕。它只是白色的。您如何判断 Web 视图是否真的填满了 self.view
?设置self.view.backgroundColor = [UIColor greenColor];
。运行您的应用程序。你看到绿色了吗?如果不是,则 Web 视图正在填充 self.view
。
【参考方案1】:
您的createWebView
方法中的大部分代码都不需要。最重要的是在添加 web 视图之前设置autoresizingMask
。
-(void)createWebView
//NSLog(@"createWebView");
self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
self.webView.scalesPageToFit = YES;
self.webView.delegate = self;
self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:self.webView];
【讨论】:
我也是这么想的,但是如果网站在我启动应用程序时配置为横向,它不适合我的整个屏幕。它只有 320 宽和 568 高的尺寸。该网站的方向正确,但我的web view
的大小不正确。它只有景观的一半大小@rmaddy
我很困惑。您的问题是网络视图的大小没有填满self.view
,还是加载的网站没有正确地填满网络视图?
我的问题是我的web view
没有填满我的self.view
我的所有应用程序都严格使用代码,就像我在答案中发布的那样。无论self.view
的大小如何变化,这样的代码都应确保Web 视图将填充self.view
。你怎么知道网络视图没有填满self.view
?
我编辑了我的帖子。它看起来像这个图像。采纳了不是问题,为什么不是全屏?【参考方案2】:
您的整个createWebView
方法是不明智的。你根本不应该关心方向。只需将您的 web 视图添加到 self.view
并使用自动布局定位它。这样,当布局完成时,无论方向或 self.view
可能发生的任何其他事情,它都会处于正确的位置/大小。
【讨论】:
以上是关于在启动应用程序时无法检测设备的方向以创建具有正确大小的 UIWebView的主要内容,如果未能解决你的问题,请参考以下文章