TabBarControllerに追加するカスタムtableViewControllerがあります
self.tabBarController.viewControllers = [NSArray arrayWithObjects:someOtherViewController, customTableViewController, nil];
self.tabBarController.selectedIndex = 1;
私が抱えている問題は、iOS7を実行しているiPhone 4の最後の1.5 tableViewCellsが画面下部のタブバーで覆われていることです。 iOSシミュレータ-iPhone Retina(4インチ)/ iOS 7.0を使用する場合、問題はまだ存在します。
「マジックナンバー」を使用せずに、tableViewを画面下部のtabBarの上部に揃える正しい方法は何ですか?
CustomViewControllerでこれを試してください:
- (void)viewDidLoad
{
[super viewDidLoad];
UIEdgeInsets adjustForTabbarInsets = UIEdgeInsetsMake(0, 0, CGRectGetHeight(self.tabBarController.tabBar.frame), 0);
self.scrollView.contentInset = adjustForTabbarInsets;
self.scrollView.scrollIndicatorInsets = adjustForTabbarInsets;
}
これはiOS 8のソリューションですが、iOS 7では次のように機能する可能性があります。それでおしまい!
49ポイントの.bottom
値でテーブルビューのcontentInset
を設定すると、これが修正されます。
正しい構成の下で、iOS [7]の新しいUIViewControllerプロパティにYES
と呼ばれるautomaticallyAdjustsScrollViewInsets
を設定することでこれを修正する必要がありますが、他の多くの要因(ビュー階層、親ビューコントローラーの設定など)。
受け入れられた答えは私にとってはうまくいきません。私の設定は少し異なります。私はプログラムでView Controllerを作成しています。私のアプリのルートはTab Bar Controllerであり、1つのタブはNavigation Controllerであり、そのルートはUIViewController
で、テーブルビューがメインビューです。
私にとってうまくいくのは、Table Viewの高さを手動で計算し、Table Viewのalloc初期化時にフレームに設定したときです。一般的な式は次のとおりです。
画面の高さ-(ステータスバーの高さ+ナビゲーションバーの高さ+タブバーの高さ)
CGFloat bottom = self.tabBarController.tabBar.frame.size.height;
NSLog(@"%f",bottom);
[self.tableview setScrollIndicatorInsets:UIEdgeInsetsMake(0, 0, bottom, 0)];
self.tableview.contentInset = UIEdgeInsetsMake(0, 0, bottom, 0);
テーブルコントローラーをNavigationコントローラーに埋め込みます。 1.ストーリーボードでビューを選択します。 2.メニューバーで、[エディタ]-> [埋め込み]-> [Navigation Controller]を選択します。
役立つことを願っています
Matt Quiros :UITabBarController-> UINavigationController-> UIViewController-> UITableViewController(UIViewControllerのサブビューとして埋め込まれています)と同様のビュー階層があります。私の場合、他の答えはうまくいきませんでした。TableView ControllerのviewWillAppear:
メソッドでTable Viewのフレームを手動で設定する必要がありました。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Adjust height of tableview (does not resize correctly in iOS 7)
CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.size.height = [self heightForTableView];
self.tableView.frame = tableViewFrame;
}
- (CGFloat)heightForTableView
{
return CGRectGetHeight([[UIScreen mainScreen] bounds]) -
(CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) +
CGRectGetHeight(self.navigationController.navigationBar.frame) +
CGRectGetHeight(self.tabBarController.tabBar.frame));
}
誰かがより良い解決策を見つけたら、共有してください!
viewDidLayoutSubviews
を実装し、bottomLayoutGuide
を使用してタブバーの高さを取得することもできます。
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGFloat bottomOffset = self.bottomLayoutGuide.length;
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, bottomOffset, 0);
}
テーブルビューのcontentInsetを変更することは有効な解決策ですが、テーブルビューがTabbarの前で停止することを確認することをお勧めします。
Paul Newmanが言ったように、特にautolayoutを使用している場合、bottomLayoutGuideを使用するのは良いことです。私の場合、BottomLayoutGuideの上部にリンクするtableviewの下部に制約を追加するのはクリーンなソリューションでした。これはStoryboardの例ですが、コードでも実行できます。
それが役に立てば幸い。
私はこれがあなたにとってよりうまくいくと思います:
[super viewDidLoad];
の後
次のコードを試してください:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;