アプリをiOS7
に移植しようとしていますが、カスタムTableViewController
がTabBar
の下の最後の行(セル)を表示しています:(
私はそれをたくさん探していますが、解決策は見つかりません。誰も私を助けることができますか?
エラーは打撃のスクリーンショットに表示されます(タブバーの下に隠れている製品を表示するために上にドラッグすると、最後の製品の一部のみが表示されます)。
ありがとう。
あなたの質問に対する答えは、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);
}
同じ問題があり、ストーリーボードを使用して解決しました。 Tab Bar Controllerで、属性インスペクターのSimulated Metricsに移動し、Bottom BarをOpaque Tab Barに設定します。それでおしまい!説明については、以下の画像を参照してください。
Saudações! (あいさつ!)
私の友人、私はこれからどれほどひどく苦労したかをあなたに伝えることはできません。 Story Boardを一度も再構成しても、私を助けたことはありませんでした。この問題は元の投稿とまったく同じで、次の方法で修正できました。
for Swift
self.edgesForExtendedLayout = []
objective-cの場合
self.edgesForExtendedLayout = NO;
viewDidLoad
に2行あり、それだけです!
self.edgesForExtendedLayout = UIRectEdgeAll;
self.tableview.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, CGRectGetHeight(self.tabBarController.tabBar.frame), 0.0f);
IOS 7では、viewControllerはフルハイトを使用します。として導入されたプロパティがあります
self.automaticallyAdjustsScrollViewInsets = NO;
いいえに設定します。確認するか、UIEdgeInsetが直後に設定されていない場合は設定します。
UIEdgeInsetsMake(top, left, bottom, right)
Edit:これも試してください
self.edgesForExtendedLayout = UIRectEdgeNone;
この問題の根本的な原因は、automaticallyAdjustsScrollViewInsets
が最初にのみ有効 VCのビュー階層のスクロールビューであることです。これはAppleによって文書化されていませんが、UITableViewControllerを使用していない限り、VCが変更が必要なスクロールビューを検出する唯一の方法です。
そのため、インセットを手動で調整せずに問題を修正するには、次のようにします。
UINavigationController
とUITabBarController
の両方には、プログラムまたはストーリーボードで設定できる透明フラグがあります。
UINavigationController
には、コンテンツを上部または下部のバーの下に拡張するかどうかを制御する2つのフラグもあります。ここでも、プログラムまたはストーリーボードで設定できます。これはすべてのサブビューに適用されます。
各UIViewController
は、コードで独自の設定を設定できます。プロパティはedgesForExtendedLayout
と呼ばれ、すべての組み合わせを設定できます。
これらのプロパティを使用すると、AutoLayoutとSprings'n'Strutsが、デバイスに関係なく、必要な方法でビューを調整できます。
UIViewController
には、もっと多くの新しいプロパティがありますので、ご覧ください。
BaseTableViewControllerをUIViewControllerからUITableViewControllerに継承するように変更して、問題を解決しました。
しかし、UIViewController内でTableViewを使用しても解決されません:(
ありがとう。
Xarly whoなどの半透明効果が必要な場合、およびAutolayoutソリューション(フレームを設定せずに)、ここで私の答えを参照してください https://stackoverflow.com/a/26419986/1158074
たぶん正しい答えではありません。そのため、この答えを投稿しますので、この答えが可能な解決策であるかどうかを教えてください。
私の場合、半透明の効果が好きなので、テーブルにフッターを追加し、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);
}
どう思いますか?
コレクションビューでも同様の問題が発生しました。以下のコレクションビューフレームとコンテンツインセットを変更すると、修正されました...
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
幸運を!
私も同じ問題を抱えていましたが、投票で答えても解決しませんでした。 私の答え と同様の質問を参照してください タブバーは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));
}
誰かがこの問題のより良い解決策を見つけたら、共有してください!