当我的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,但是有更好的方法来解决这个问题吗?
答案 0 :(得分:1)
另一种解决方案是在应用此代码之前检查iOS 11,但是有更好的方法可以解决这个问题吗?
不,没有。 正如您正确观察到的,这在iOS 10和iOS 11中完全不同。因此,您必须根据运行时的版本编写条件代码。
对于iOS 10,您可以设置显示的contentInset
。
对于iOS 11,您将contentInsetAdjustmentBehavior
设置为.always
。