Дисплей UITabBarController

Я новичок в iOS-разработке. Я разрабатываю приложение, использующее контроллер панели вкладок. Я программно устанавливаю рамку для контроллера панели вкладок, но когда я переключаюсь на iPhone 5, между элементами панели вкладок и основным видом создается пустое пространство. Ниже приведен снимок экрана приложения на симуляторе iPhone 5.

Снимок экрана на симуляторе дисплея Retina 4.5

Ниже приведена строка кода, в которой я устанавливаю кадр для UITabBarController:

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

person Shital Tiwari    schedule 25.04.2013    source источник
comment
вам нужно изменить рамки для iphone5, потому что размер экрана iphone 5 больше по сравнению с iphone 4.   -  person Balu    schedule 25.04.2013


Ответы (4)


поместите эту строку кода и проверьте ее, вы должны установить кадры соответственно.

 

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

       [rootTabBarController.view setFrame:CGRectMake(0,0,320, 568)];
     }
 else
     {
        [rootTabBarController.view setFrame:CGRectMake(0,0,320, 480)];
     }
person Balu    schedule 25.04.2013
comment
Я пробовал ваше решение, но когда я использую это в кодировании, панель вкладок выходит за пределы экрана... - person Shital Tiwari; 25.04.2013
comment
у вас проблемы с фоновым изображением или панелью вкладок? - person Balu; 25.04.2013
comment
у меня возникает эта проблема с фоновым изображением из-за панели вкладок - person Shital Tiwari; 29.04.2013

Это из-за разницы в высоте между более ранними 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];
person Leon Lucardie    schedule 25.04.2013

Вам необходимо настроить кадр в соответствии с разрешением устройства. Как мы знаем, размер экрана 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)];

Надеюсь, это поможет вам.

person Nishant Tyagi    schedule 25.04.2013

просто.не.делать.это (не ставить рамку) !!!

Самый простой и чистый метод:

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 и посмотреть, как это делает Apple.

и .. (совет, который может помочь вам в будущем) UITabBarController должен быть на вершине иерархии представлений (непосредственно в UIWindow) для правильного вращения и т. д., мой пример кода включает его (это может сэкономить вам время в будущем)

person Valentyn Kuznietsov    schedule 25.04.2013
comment
Проблема с использованием этой техники заключается в том, что у меня есть другой экран в качестве rootViewController, и с этого экрана я перехожу на этот экран tabBar. Если у вас есть другое решение, пожалуйста, предложите! - person Shital Tiwari; 25.04.2013