Я думаю, что у вас есть проблемы со смещением кадров.С включенной панелью навигации прямоугольник, который вы получаете в appFrame, имеет смещение 44.f (высота панели навигации) - проверьте с помощью NSLog и посмотрите, правда ли это.
Поскольку вы устанавливаете рамку вида, который будет помещен в начало координат, для исходных координат x и y должно быть установлено значение ноль.Вы можете сделать это более безопасным способом, установив
CGFloat navHeight = navController.navigationBarHidden ? 0 :
navController.navigationBar.frame.size.height;
На самом деле я думаю, что использование свойства bounds [UIScreen mainScreen] может быть лучшим решением в целом.Он будет поставляться с правильно установленными оригиналом и размером, и вам не нужно проверять наличие панели навигации.
Проверьте, что происходит:
CGRect screenBounds = [[UIScreen mainScreen] bounds]
NSLog(@"%@", NSStringFromCGRect(screenBounds));
CGRect screenFrame = [[UIScreen mainScreen] applicationFrame]
NSLog(@"%@", NSStringFromCGRect(screenFrame));