web-dev-qa-db-ja.com

タブバーはiOS7のTableViewセルをカバーします

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の上部に揃える正しい方法は何ですか?

31
JuJoDi

CustomViewControllerでこれを試してください:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIEdgeInsets adjustForTabbarInsets = UIEdgeInsetsMake(0, 0, CGRectGetHeight(self.tabBarController.tabBar.frame), 0);
    self.scrollView.contentInset = adjustForTabbarInsets;
    self.scrollView.scrollIndicatorInsets = adjustForTabbarInsets;
}
77
dariaa

これはiOS 8のソリューションですが、iOS 7では次のように機能する可能性があります。それでおしまい!

example

50
Hans One

49ポイントの.bottom値でテーブルビューのcontentInsetを設定すると、これが修正されます。

正しい構成の下で、iOS [7]の新しいUIViewControllerプロパティにYESと呼ばれるautomaticallyAdjustsScrollViewInsetsを設定することでこれを修正する必要がありますが、他の多くの要因(ビュー階層、親ビューコントローラーの設定など)。

7
jaredsinclair

受け入れられた答えは私にとってはうまくいきません。私の設定は少し異なります。私はプログラムでView Controllerを作成しています。私のアプリのルートはTab Bar Controllerであり、1つのタブはNavigation Controllerであり、そのルートはUIViewControllerで、テーブルビューがメインビューです。

私にとってうまくいくのは、Table Viewの高さを手動で計算し、Table Viewのalloc初期化時にフレームに設定したときです。一般的な式は次のとおりです。

画面の高さ-(ステータスバーの高さ+ナビゲーションバーの高さ+タブバーの高さ)

6
Matthew Quiros
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);
5
shadox

テーブルコントローラーをNavigationコントローラーに埋め込みます。 1.ストーリーボードでビューを選択します。 2.メニューバーで、[エディタ]-> [埋め込み]-> [Navigation Controller]を選択します。

役立つことを願っています

2
Ssemmandarobert

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));
}

誰かがより良い解決策を見つけたら、共有してください!

1
Steph Sharp

viewDidLayoutSubviewsを実装し、bottomLayoutGuideを使用してタブバーの高さを取得することもできます。

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    CGFloat bottomOffset = self.bottomLayoutGuide.length;

    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, bottomOffset, 0);
}
0
Paul Newman

テーブルビューのcontentInsetを変更することは有効な解決策ですが、テーブルビューがTabbarの前で停止することを確認することをお勧めします。

Paul Newmanが言ったように、特にautolayoutを使用している場合、bottomLayoutGuideを使用するのは良いことです。私の場合、BottomLayoutGuideの上部にリンクするtableviewの下部に制約を追加するのはクリーンなソリューションでした。これはStoryboardの例ですが、コードでも実行できます。

enter image description here

それが役に立てば幸い。

0
Michael Pirotte

私はこれがあなたにとってよりうまくいくと思います:

[super viewDidLoad];の後

次のコードを試してください:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;
0
DominicanCoder