automaticallyAdjustsScrollViewInsets
の機能をテストするための非常にシンプルなデモアプリを作成しましたが、tableViewの最後のセルはタブバーで覆われています。
私のAppDelegateコード:
UITabBarController *tabControl = [[UITabBarController alloc] init];
tabControl.tabBar.translucent = YES;
testViewController *test = [[testViewController alloc] init];
[tabControl setViewControllers:@[test]];
[self.window setRootViewController:tabControl];
私のtestViewController(UITableViewControllerのサブクラス)コード:
- (void)viewDidLoad
{
[super viewDidLoad];
self.automaticallyAdjustsScrollViewInsets = YES;
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
self.tableView.dataSource = self;
self.tableView.scrollIndicatorInsets = self.tableView.contentInset;
//[self.view addSubview:self.tableView];
// Do any additional setup after loading the view.
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@""];
cell.textLabel.text = @"test";
return cell;
}
これはiOS 7のバグですか?そうでない場合、私は何を間違えましたか?
automaticallyAdjustsScrollViewInsets
は、コントローラーview
がUIScrollView
(テーブルビューが1つ)の場合にのみ機能すると思います。
コントローラーのview
が通常のUIView
であり、UITableView
が単なるサブビューであるという問題があるようです。そのため、次のいずれかを行う必要があります。
テーブルビューを「ルート」ビューにします。
インセットを手動で調整します。
UIEdgeInsets insets = UIEdgeInsetsMake(controller.topLayoutGuide.length,
0.0,
controller.bottomLayoutGuide.length,
0.0);
scrollView.contentInset = insets;
編集:
SDKはコントローラーのルートビューではないにもかかわらず、一部のスクロールビューを調整できるようです。
これまでのところ、UIScrollView
とUIWebView
のscrollView
がインデックス0
。
とにかく、これは将来のiOSリリースで変更される可能性があるため、インセットを自分で調整する方が安全です。
automaticallyAdjustsScrollViewInsets
が機能するには、View ControllerがUINavigaitonControllerのスタック上に直接存在する必要があります(つまり、子View Controllerではありません)
ナビゲーションスタック上にある別のView Controllerの子View Controllerである場合、代わりにautomaticallyAdjustsScrollViewInsets = NO
親。あるいは、これを行うことができます:
self.parentViewController.automaticallyAdjustsScrollViewInsets = NO;
私はこの投稿が少し古いことを知っていますが、iOS 11でこの問題を解決しましたSwift 4、私の現在の問題はiOS11にScrollViewが存在するときにインセットを検証する新しいプロパティがあることです、それは contentInsetAdjustmentBehavior
で、これはScrollViewのプロパティであり、デフォルトのプロパティはautomatic
であるため、私のコードは次のとおりでした。
if #available(iOS 11, *) {
myScroll.contentInsetAdjustmentBehavior = .never
} else {
self.automaticallyAdjustsScrollViewInsets = false
}
これもあなたの問題を解決することを望みます...
私は同じ問題、望ましくない上部パディングを含むテーブルビューを抱えていました。
すべての回答は、automaticallyAdjustsScrollViewInsets = NO
、しかし、それは私のためのパディングを排除していませんでした。
ここでの他の回答と同様に、非標準のビュー階層を使用している場合、これらの指示を少し調整する必要があります。
UITableViewControllerが埋め込まれたUIViewControllerがありました。 Table View ControllerでautomaticallyAdjustsScrollViewInsets
を設定しても機能していませんでした。
代わりに、automaticallyAdjustsScrollViewInsets = NO
on parent私のTable View Controllerを組み込んでいたUIViewController。これにより、テーブルビューのパディングが正常に削除されました。
この階層があります:
カスタムNavigationControllerにはカスタムTabbarControllerが含まれます
カスタムtabbarcontrollerには複数のコントローラーが含まれます
これらのコントローラーにはサブビューが含まれ、そのうちの1つにはuiscrollviewのサブクラスが含まれます。
自動的にAdjustsScrollViewInsetsをNOに設定する必要がありました
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.automaticallyAdjustsScrollViewInsets = NO;
カスタムtabbarcontrollerで。階層内の他のコントローラーは、ネストされたスクロールビューの動作に影響を与えません。