我是iOS开发的新手。我正在开发一个使用标签栏控制器的应用程序。我正在以编程方式为标签栏控制器设置框架,但是当我切换到 iPhone 5 时,标签栏项目和主视图之间会创建空白区域。以下是 iPhone 5 模拟器上的应用程序屏幕截图。
以下是我设置框架的代码行UITabBarController
:
[rootTabBarController.view setFrame:CGRectMake(0,-20,320, 480)];
我是iOS开发的新手。我正在开发一个使用标签栏控制器的应用程序。我正在以编程方式为标签栏控制器设置框架,但是当我切换到 iPhone 5 时,标签栏项目和主视图之间会创建空白区域。以下是 iPhone 5 模拟器上的应用程序屏幕截图。
以下是我设置框架的代码行UITabBarController
:
[rootTabBarController.view setFrame:CGRectMake(0,-20,320, 480)];
把这行代码检查一下,你必须相应地设置框架。
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
[rootTabBarController.view setFrame:CGRectMake(0,0,320, 568)];
}
else
{
[rootTabBarController.view setFrame:CGRectMake(0,0,320, 480)];
}
这是因为早期的 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];
您需要根据设备分辨率调整帧。我们知道 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)];
希望它可以帮助你。
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 上)才能正确旋转等,我的示例代码包括它(它可以在将来为您节省一些时间)