应用程序在横向模式下启动时 UIOrientation 不起作用
Posted
技术标签:
【中文标题】应用程序在横向模式下启动时 UIOrientation 不起作用【英文标题】:UIOrientation not working when application launch in Landscape mode 【发布时间】:2012-01-10 15:04:46 【问题描述】:我创建了一个支持所有方向的应用程序。
我还在viewDidLoad
方法中创建了一个表格和搜索栏(不使用xib)。我还编写了以下代码来调整表格视图和搜索栏的位置。
当我在纵向视图中启动我的应用程序时它可以正常工作,当我旋转到横向视图时,它会完美地调整视图。
但是当我在横向模式下启动我的应用程序时,视图没有调整,而是采用纵向视图的定位。但是,当我以纵向旋转然后横向旋转时,它仍然可以正常工作。
另外为了确保捕捉到正确的方向,我在这个方法中写了NSLog
,它显示了正确的值。
另外为了确保这个方法(adjustViewsForOrientation
)被显式调用,我也在viewDidLoad
中调用了这个方法。
[self adjustViewsForOrientation:self.interfaceOrientation];
这里是sn-p的其余代码:
- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation
if (orientation == UIInterfaceOrientationLandscapeLeft ||
orientation == UIInterfaceOrientationLandscapeRight)
aTableView.frame = CGRectMake(705, 220, 320, 280);
sBar.frame=CGRectMake(805, 0, 220, 40);
NSLog(@"inside landscape");
else if (orientation == UIInterfaceOrientationPortrait ||
orientation == UIInterfaceOrientationPortraitUpsideDown)
aTableView.frame = CGRectMake(450, 220, 320, 280);
sBar.frame=CGRectMake(550,3,220,40);
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
// [self adjustViewsForOrientation]
[self adjustViewsForOrientation:toInterfaceOrientation];
NSLog(@"landscap");
【问题讨论】:
你能打印出 NSLog(@"To Orientation: %d", toInterfaceOrientation);并向我们展示结果? 复制 - ***.com/questions/8775911/… 【参考方案1】:试试这个方法,它可能会有所帮助。在 viewDidLoad 方法中注册 UIDeviceOrientationDidChange:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(adjustViewsForOrientation:) name:UIDeviceOrientationDidChangeNotification object:nil];
还要改-(void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation
到-(void) adjustViewsForOrientation:(NSNotification *)notification
并通过获取方向值来获得新的方向
例如UIDeviceOrientation newDeviceOrientation = [notification orientation];
【讨论】:
以上是关于应用程序在横向模式下启动时 UIOrientation 不起作用的主要内容,如果未能解决你的问题,请参考以下文章