无法在启动应用程序时检测设备方向以创建大小正确的 UIWebView
Can't detect orientation of device at launching app to create UIWebView with correct size
如果我启动我的应用程序,我想知道我的设备的方向。
在我的主 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 or iOS: Device orientation on load) 的帖子,但它并没有解决我的问题
编辑:
只有当我的设备处于横屏状态或者 UIWebView
应该在启动应用程序时以横屏模式开始时才会发生这种情况
编辑 2:
问题已解决。我只添加了
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[[self webView] setFrame:[[self view] bounds]];
}
而我的 UIWebView
总是和我的 UIView
一样大。在横向也是如此。
这里的答案()解决了我的问题。我是 Objective-C 的新手,但我在创建时将 UIWebView
的大小设置为与 UIView
相同的大小,这是否有意义?
您的整个 createWebView
方法是 ill-advised。你根本不应该关心方向。只需将您的网络视图添加到 self.view
并使用自动布局对其进行定位。这样,当布局完成时,无论方向或 self.view
.
可能发生的任何其他情况,它都会处于正确的位置/大小
您 createWebView
方法中的大部分代码都不需要。最重要的是在添加网络视图之前设置 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];
}
如果我启动我的应用程序,我想知道我的设备的方向。
在我的主 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 or iOS: Device orientation on load) 的帖子,但它并没有解决我的问题
编辑:
只有当我的设备处于横屏状态或者 UIWebView
应该在启动应用程序时以横屏模式开始时才会发生这种情况
编辑 2:
问题已解决。我只添加了
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[[self webView] setFrame:[[self view] bounds]];
}
而我的 UIWebView
总是和我的 UIView
一样大。在横向也是如此。
这里的答案()解决了我的问题。我是 Objective-C 的新手,但我在创建时将 UIWebView
的大小设置为与 UIView
相同的大小,这是否有意义?
您的整个 createWebView
方法是 ill-advised。你根本不应该关心方向。只需将您的网络视图添加到 self.view
并使用自动布局对其进行定位。这样,当布局完成时,无论方向或 self.view
.
您 createWebView
方法中的大部分代码都不需要。最重要的是在添加网络视图之前设置 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];
}