I have same question when make animations.
Finally solved question, idea:create a frame equal safeArea frame.
(Device Orientaion only Left and Right)
CGRect safeAreaFrame;
if (@available(iOS 11.0, *)) {
UIEdgeInsets safeAreaInsets = self.view.safeAreaInsets;
safeAreaFrame = CGRectMake(safeAreaInsets.left,
safeAreaInsets.top,
self.view.frame.size.width - safeAreaInsets.left - safeAreaInsets.right,
self.view.frame.size.height - safeAreaInsets.top - safeAreaInsets.bottom);
} else {
safeAreaFrame = self.view.frame;
}
then you have safe area frame use, for example:
UIView *view = [[UIView alloc] initWithFrame:safeAreaFrame];
view.backgroundColor = UIColor.redColor;
[self.view addSubview:view];
Note: The safe area insets return (0, 0, 0, 0) in viewDidLoad,
hence they are set later than viewDidLoad,
put into viewSafeAreaInsetsDidChange or viewDidAppear.
I hope this will help you.