0

我是iOS开发的新手。我正在开发一个使用标签栏控制器的应用程序。我正在以编程方式为标签栏控制器设置框架,但是当我切换到 iPhone 5 时,标签栏项目和主视图之间会创建空白区域。以下是 iPhone 5 模拟器上的应用程序屏幕截图。

4.5 视网膜显示模拟器上的屏幕截图

以下是我设置框架的代码行UITabBarController

[rootTabBarController.view setFrame:CGRectMake(0,-20,320, 480)];
4

4 回答 4

1

把这行代码检查一下,你必须相应地设置框架。

 

if ([[UIScreen mainScreen] bounds].size.height == 568)
     {

       [rootTabBarController.view setFrame:CGRectMake(0,0,320, 568)];
     }
 else
     {
        [rootTabBarController.view setFrame:CGRectMake(0,0,320, 480)];
     }
于 2013-04-25T12:32:55.757 回答
0

这是因为早期的 iPhone 和 iPhone 5 之间存在高度差异。

您可以通过两种方式解决此问题:

在 iPhone 5 上运行时手动设置帧大小。

BOOL isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom] 
== UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height) >= 568));
if(isIphone5)
{
   [rootTabBarController.view setFrame:CGRectMake(0,0,320, 568)];
}
else{
   [rootTabBarController.view setFrame:CGRectMake(0,0,320, 480)];
}

或者您可以设置 AutoResizingmasks 让您的视图自动调整为新的屏幕尺寸或方向(自动调整大小的有用性取决于视图的定义方式)。

[rootTabBarController.view setAutoResizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
于 2013-04-25T12:37:25.763 回答
0

您需要根据设备分辨率调整帧。我们知道 iPhone 5 的屏幕尺寸为 (320,568),因此您可以检查您使用的是 iPhone 5(4 英寸屏幕)还是其他(3.5 英寸屏幕)使用

#define IS_IPHONE ( [[[UIDevice currentDevice] model] isEqualToString:@"iPhone"])
#define IS_HEIGHT_GTE_568 [[UIScreen mainScreen ] bounds].size.height >= 568.0f
#define IS_IPHONE_5 ( IS_IPHONE && IS_HEIGHT_GTE_568 )

然后将框架设置为

[rootTabBarController.view setFrame:CGRectMake(0,-20,320,IS_IPHONE_5?568.0f:480.0f)];

希望它可以帮助你。

于 2013-04-25T12:38:15.647 回答
0

just.dont.do.it(不要设置框架)!!!

最简单和干净的技术是:

YourAppDelegate.h:

@property(nonatomic,retain) UITabBarController * tabBarController;

YourAppDelegate.m:

@synthesize tabBarController;
#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

self.tabBarController = [[[UITabBarController alloc] init] autorelease];

UINavigationController      *viewController1 = [[[UINavigationController alloc] initWithRootViewController:[[[UIViewController alloc] init] autorelease]] autorelease];

UINavigationController      *viewController2 = [[[UINavigationController alloc] initWithRootViewController:[[[UIViewController alloc] init] autorelease]] autorelease];

self.tabBarController.viewControllers = @[viewController1, viewController2];
self.tabBarController.customizableViewControllers = nil;

self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];


return YES;

}

一切都会好起来的。iPhone、iPad 等上的框架、旋转、自动调整大小等。

顺便说一句,您可以在 Xcode 中使用“Tab Bar application”模板创建新项目,看看 Apple 是如何做到的

和..(建议,将来可以帮助您)UITabBarController 必须位于视图层次结构的顶部(直接在 UIWindow 上)才能正确旋转等,我的示例代码包括它(它可以在将来为您节省一些时间)

于 2013-04-25T12:35:07.803 回答