gpt4 book ai didi

iOS 4.3 用户界面方向问题,状态栏有 20 个点

转载 作者:可可西里 更新时间:2023-11-01 06:10:39 24 4
gpt4 key购买 nike

我有下一个 View Controller :

  • FirstViewController

  • 第二 View Controller

  • 第三 View Controller

目标是:通过 SecondViewController 呈现 ThirdViewController。

在 FirstViewController 中,我使用以下方法呈现 SecondViewController:

[self presentModalViewController:secondViewController animated:NO];

加载 SecondViewController 时,我在 -viewDidAppear: 委托(delegate)回调方法中显示 ThirdViewController:

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self presentModalViewController:thirdViewController animated:NO];
}

因此,我认为当前 View Controller 的方案已经为我们所有人所熟知。可能是代码设计的不好,但是我做了这个解决方案,出现了下面描述的问题。

当加载 ThirdViewController 时,我有 20 个点的问题(但仅适用于 iOS 4.3,其他版本工作正常)。

我已附上显示我的问题的文件。

enter image description here

正如您在左侧看到的,我有不需要的偏移量。旋转屏幕后,此问题消失。

当我打印 ThirdViewController View 框架时,它显示 frame = (0 0; 480 300)。也许是 SecondViewControllers View 中的问题。

关于旋转。我在每个 Controller 中实现了以下这些方法:

- (BOOL)shouldAutorotate
{
return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation==UIInterfaceOrientationLandscapeLeft || interfaceOrientation==UIInterfaceOrientationLandscapeRight)
return YES;

return NO;
}

(更新:)是的,我现在发现了问题,SecondViewController frame = (0 20; 300 480);但我不明白为什么。

我添加这个方法来检查当前方向:

-(void) getCurrentOrientation{

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

if(orientation == UIInterfaceOrientationPortrait){
NSLog(@"portrait");
} else if(orientation == UIInterfaceOrientationLandscapeRight) {
NSLog(@"LandscapeRight");
} else if(orientation == UIInterfaceOrientationLandscapeLeft) {
NSLog(@"LandscapeLeft");
}
}

并在 -viewDidAppear: 方法中检查它,它显示当前方向是纵向模式,而不是我在 shouldAutorotateToInterfaceOrientation 回调中设置的横向模式。

此外,我发现它适用于 iPad iOS 4.3。

我在 iPhone 模拟器上做了所有测试。

我已将这段代码添加到我的基本 View Controller 中,但它仍然对我不起作用。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
//Landscape orientation code

if (IS_IPAD) {
[self.view setFrame:CGRectMake(0, 0, 1024, 748)];
}
else if (IS_IPHONE) {
[self.view setFrame:CGRectMake(0, 0, 480, 300)];
}
else if (IS_IPHONE_5) {
[self.view setFrame:CGRectMake(0, 0, 568, 300)];
}

NSLog(@"landscape");
NSLog(@"%@", [NSValue valueWithCGRect:self.view.frame]);

}else {
//portrait orientation code
NSLog(@"portrait");
}
}

(工作更新:)

我使用下面的代码解决了这个问题:

[UIApplication sharedApplication].statusBarHidden = YES;
if (self.thirdViewController) self.thirdViewController = nil;
self.thirdViewController = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController"] bundle:nil];
[self presentModalViewController:self.self.thirdViewController animated:NO];
[UIApplication sharedApplication].statusBarHidden = NO;

最佳答案

Alexander,请你试试下面的代码。它在 4.3 中工作(添加到 SecondViewController):

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[UIApplication sharedApplication].statusBarHidden = YES;
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
AMThirdViewController* th = [[AMThirdViewController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:th animated:NO];
[UIApplication sharedApplication].statusBarHidden = NO;
}

关于iOS 4.3 用户界面方向问题,状态栏有 20 个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15730152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com