我创建了一个支持所有方向的应用程序。
我还在viewDidLoad
方法中创建了一个表和搜索栏(不使用xib)。我还编写了以下代码来调整表格视图和搜索栏的位置。
当我在纵向视图中启动应用程序时,它可以正常工作,当我旋转到横向视图时,它可以完美地调整视图。
但是当我以横向模式启动我的应用程序时,视图不会被调整,而是采用纵向视图的定位。但是,当我以纵向旋转然后横向拍摄时,它可以正常工作。
为了确保捕获到正确的方向,我在此方法中写了NSLog
,它显示了正确的值。
另外为了确保明确调用此方法(adjustViewsForOrientation
),我也在viewDidLoad
中调用了该方法。
[self adjustViewsForOrientation:self.interfaceOrientation];
以下是代码片段的其余部分:
- (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");
}
答案 0 :(得分:0)
尝试这种方法,它可能有所帮助。在viewDidLoad方法中注册UIDeviceOrientationDidChange:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(adjustViewsForOrientation:) name:UIDeviceOrientationDidChangeNotification object:nil];
并更改-(void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation
到-(void) adjustViewsForOrientation:(NSNotification *)notification
并通过获取方向值
获取新方向 e.g。 UIDeviceOrientation newDeviceOrientation = [notification orientation];