UITableview第一个单元格在iOS 10的导航栏后面向上滚动

时间:2018-05-20 15:26:56

标签: ios objective-c uitableview ios10 ios11

当我的viewcontroller加载时,我会弹出一个弹出窗口(myCustomViewController.m)。弹出窗口是一个具有tableview的viewcontroller。下面是我如何显示弹出窗口的代码。

- (void)showTableviewpopup{

   myCustomViewController *myVC = [myCustomViewController controller];
    myVC.delegate = self;
    UINavigationController *navCtrl = [[UINavigationController alloc] initWithRootViewController: myVC];
    navCtrl.modalPresentationStyle = UIModalPresentationFormSheet;

    dispatch_async(dispatch_get_main_queue(), ^{
        [self presentViewController:navCtrl animated:YES completion:NULL];
    });
}
//This is how myCustomViewController interface looks like
    @interface myCustomViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

现在当这个弹出窗口加载第一个单元格时,tableview会在导航栏后面向上滚动,无法将其拉下来。这在iOS 11上工作正常,但在iOS 10上有问题。如果我添加以下代码,这可以解决iOS 10中的问题,但在iOS 11中增加了额外的空间。

- (void)viewDidLayoutSubviews {
    UIEdgeInsets insets = UIEdgeInsetsMake(self.topLayoutGuide.length, 0, 0, 0);
    self.tableView.contentInset = insets;
    self.tableView.scrollIndicatorInsets = insets;
}

另一种解决方案是在应用此代码之前检查iOS 11,但是有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

  

另一种解决方案是在应用此代码之前检查iOS 11,但是有更好的方法可以解决这个问题吗?

不,没有。 正如您正确观察到的,这在iOS 10和iOS 11中完全不同。因此,您必须根据运行时的版本编写条件代码。

  • 对于iOS 10,您可以设置显示的contentInset

  • 对于iOS 11,您将contentInsetAdjustmentBehavior设置为.always