web-dev-qa-db-ja.com

iOS 7カスタムTableViewはTabBarの下にあります

アプリをiOS7に移植しようとしていますが、カスタムTableViewControllerTabBarの下の最後の行(セル)を表示しています:(

私はそれをたくさん探していますが、解決策は見つかりません。誰も私を助けることができますか?

カスタムテーブルビュークラス

エラーは打撃のスクリーンショットに表示されます(タブバーの下に隠れている製品を表示するために上にドラッグすると、最後の製品の一部のみが表示されます)。

screenshot

ありがとう。

31
Paulo Coutinho

あなたの質問に対する答えは、dariaaが答えた別の投稿で見つけました。

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

それは私にとってはうまくいきました。

私はそれを解決した元の男ではないので、私のために信用しないでください。

カスタムTableViewControllerで、[super viewDidLoad]の下に次の2行を追加します。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.edgesForExtendedLayout = UIRectEdgeAll;
    self.tableView.contentInset = UIEdgeInsetsMake(0., 0., CGRectGetHeight(self.tabBarController.tabBar.frame), 0); 
} 
30
Wojtek

同じ問題があり、ストーリーボードを使用して解決しました。 Tab Bar Controllerで、属性インスペクターのSimulated Metricsに移動し、Bottom BarをOpaque Tab Barに設定します。それでおしまい!説明については、以下の画像を参照してください。 enter image description here

Saudações! (あいさつ!)

34
José Flávio

私の友人、私はこれからどれほどひどく苦労したかをあなたに伝えることはできません。 Story Boardを一度も再構成しても、私を助けたことはありませんでした。この問題は元の投稿とまったく同じで、次の方法で修正できました。

for Swift

self.edgesForExtendedLayout = []

objective-cの場合

self.edgesForExtendedLayout = NO;
10
An Se

viewDidLoadに2行あり、それだけです!

self.edgesForExtendedLayout = UIRectEdgeAll;
self.tableview.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, CGRectGetHeight(self.tabBarController.tabBar.frame), 0.0f);
8

IOS 7では、viewControllerはフルハイトを使用します。として導入されたプロパティがあります

self.automaticallyAdjustsScrollViewInsets = NO;

いいえに設定します。確認するか、UIEdgeInsetが直後に設定されていない場合は設定します。

UIEdgeInsetsMake(top, left, bottom, right)

こちらをご覧ください https://developer.Apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

Edit:これも試してください

self.edgesForExtendedLayout = UIRectEdgeNone;
6
Raheel Sadiq

この問題の根本的な原因は、automaticallyAdjustsScrollViewInsets最初にのみ有効 VCのビュー階層のスクロールビューであることです。これはAppleによって文書化されていませんが、UITableViewControllerを使用していない限り、VCが変更が必要なスクロールビューを検出する唯一の方法です。

そのため、インセットを手動で調整せずに問題を修正するには、次のようにします。

  1. [スクロールビューのインセットを調整]がオンになっていることを確認します。
  2. TableViewがビュー階層のfirstサブビューであることを確認してください。 (他のすべての要素の上に移動します)
5
AmitP

私は同じ問題を抱えています。解決策の1つは、ToolBarを半透明にすることですnot。方法は次のとおりです。

  • 最初にドキュメントビューアーからツールバーを選択します ここのように
  • 次に、Translucentlike like のチェックを外します

お役に立てれば。

ありがとう。

1
Minas Kamel

UINavigationControllerUITabBarControllerの両方には、プログラムまたはストーリーボードで設定できる透明フラグがあります。

UINavigationControllerには、コンテンツを上部または下部のバーの下に拡張するかどうかを制御する2つのフラグもあります。ここでも、プログラムまたはストーリーボードで設定できます。これはすべてのサブビューに適用されます。

UIViewControllerは、コードで独自の設定を設定できます。プロパティはedgesForExtendedLayoutと呼ばれ、すべての組み合わせを設定できます。

これらのプロパティを使用すると、AutoLayoutとSprings'n'Strutsが、デバイスに関係なく、必要な方法でビューを調整できます。

UIViewControllerには、もっと多くの新しいプロパティがありますので、ご覧ください。

1
Helge Becker

BaseTableViewControllerをUIViewControllerからUITableViewControllerに継承するように変更して、問題を解決しました。

しかし、UIViewController内でTableViewを使用しても解決されません:(

ありがとう。

0
Paulo Coutinho

Xarly whoなどの半透明効果が必要な場合、およびAutolayoutソリューション(フレームを設定せずに)、ここで私の答えを参照してください https://stackoverflow.com/a/26419986/1158074

0
Michael Pirotte

たぶん正しい答えではありません。そのため、この答えを投稿しますので、この答えが可能な解決策であるかどうかを教えてください。

私の場合、半透明の効果が好きなので、テーブルにフッターを追加し、scrollIndicatorsを変更しました。

- (void)viewDidLoad
{
    // Do any additional setup after loading the view.
    [super viewDidLoad];
    UIView *footer = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.agendaItemsTable.frame.size.width, self.tabBarController.tabBar.frame.size.height)];
    self.agendaItemsTable.tableFooterView = footer;
    self.agendaItemsTable.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, self.tabBarController.tabBar.frame.size.height, 0);

}

どう思いますか?

0
xarly

コレクションビューでも同様の問題が発生しました。以下のコレクションビューフレームとコンテンツインセットを変更すると、修正されました...

    guard let cv = collectionView,
        let tabBar = tabBarController?.tabBar else { return }

    // Resize collection view for tab bar
    let adjustedFrame = CGRect(Origin: cv.frame.Origin,
                               size: CGSize(width: cv.frame.width, height: cv.frame.height - tabBar.frame.height))
    cv.frame = adjustedFrame

    // Adjust content inset for tab bar
    let adjustedContentInsets = UIEdgeInsetsMake(0, 0, tabBar.frame.height, 0)
    cv.contentInset = adjustedContentInsets
    cv.scrollIndicatorInsets = adjustedContentInsets

幸運を!

0
nananta

私も同じ問題を抱えていましたが、投票で答えても解決しませんでした。 私の答え と同様の質問を参照してください タブバーはiOS7のTableViewセルをカバーしています

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

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

0
Steph Sharp