View ControllerおよびViewに関するカスタムUITabBarControllerの問題
-
07-07-2019 - |
質問
タブバーの外観を完全に制御できるように、カスタムUITabBarControllerを作成しています。すべて動作しているので、それが処理するView Controllerの配列があります。
コントローラーには、画面いっぱいに表示されるメインビューがあり、その内部にはタブバーの下部にUIViewがあります。そのタブバービューには、各View Controller用のボタンがあります。ボタンが押されたら、View Controllerのビューをメインビューに追加し、Tab Barビューを覆わないようにフレームを設定します。
controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight);
これはすべて正常に機能し、View Controller間をスムーズに切り替えることができます。ただし、モーダルView Controllerを表示してから閉じると、現在のView Controllerのビューは全画面になり、タブバーが隠れてしまいます。自動サイズ変更マスクをサイズ変更しないように設定しようとしましたが、引き続き発生します。
また、次を使用して、View Controllerビューをタブバーの下に追加しようとしました:
[self.view insertSubview:controller.view atIndex:0];
しかし、それを行うと、タブバーはモーダルビューの上にも表示されます!それは奇妙です。理解していないことがあると思うので、誰かが不足していることを説明してくれたらありがたいです!
ありがとう、
マイク
解決 3
タブコントローラーのタブバーの上部にサブビューを挿入するだけで、タブバーの外観を制御するより良い方法を見つけることができました。それは御worked走でした!
他のヒント
設定をお試しください
controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight);
コントローラーのviewWillAppearメソッド内
これを試してください。 Tab Bar Controller内に動的View Controllerが必要だと思います。
-(void)applicationDidFinishLaunching:(UIApplication *)application {
// Add the tab bar controller's current view as a subview of the window
tabBarController.delegate=self;
tabBarController=[[UITabBarController alloc] init];
mainDashBoard=[[DashBoard alloc] initWithNibName:@"DashBoard" bundle:nil];
mainSearchView=[[SearchView alloc] initWithNibName:@"SearchView" bundle:nil];
mainMoreView=[[MoreView alloc] initWithNibName:@"MoreView" bundle:nil];
UINavigationController *nvCtr0=[[[UINavigationController alloc] init] autorelease];
UINavigationController *nvCtr1=[[[UINavigationController alloc] initWithRootViewController:mainDashBoard] autorelease];
UINavigationController *nvCtr2=[[[UINavigationController alloc] initWithRootViewController:mainSearchView] autorelease];
UINavigationController *nvCtr3=[[[UINavigationController alloc] initWithRootViewController:mainMoreView] autorelease];
UINavigationController *nvCtr4=[[[UINavigationController alloc] init] autorelease];//[[[UINavigationController alloc] initWithRootViewController:nil] autorelease];
tabBarController.viewControllers=[NSArray arrayWithObjects:nvCtr0,nvCtr1,nvCtr2,nvCtr3,nvCtr4,nil];
nvCtr0.tabBarItem.enabled=NO;
nvCtr4.tabBarItem.enabled=NO;
[window tabBarController.view];
}