Если в вашем viewcontroller вы хотите использовать полноэкранный режим и полностью переопределить панель навигации своим собственным подклассом, убедитесь, что вы делаете это в инициализаторе, и в представлении будут отображаться методы
[self.navigationController setNavigationBarHidden: true animated: true];[self setExtendedLayoutIncludesOpaqueBars: true];
оттуда вы должны получить доступ к значениям верхнего макета, который будет 44 точками и 20 точками в зависимости от размера iphone, к которому вы обращаетесь таким образом в loadview или viewdidloadили пользовательский подкласс
UIWindow * window = UIApplication.sharedApplication.keyWindow;CGFloat topPadding = window.safeAreaInsets.top;
, затем вычисляется кадр вашей пользовательской панели навигации следующим образом:
CGRect tempRect = CGRectMake (0, 0, self.view.frame.size.width, topPadding + 44);
44 присутствует, потому что он постоянен для всех iphone и ipads на данный момент (это может измениться в будущем и аннулировать это решение, но пока это стандарт)
, который вернет правильные размеры для всех размеров iPhone.
THIS => [self setExtendedLayoutIncludesOpaqueBars: true];
АБСОЛЮТНО необходимо сделать эту работу, как я объяснил.Это не очень хорошая идея, чтобы идти по этому пути, потому что очень редко вам когда-либо нужно переопределять и заменять панель навигации на какой-то пользовательский UIView, но если вам нужно это сделать, это то, как вы это делаете.Просто знайте, что это сломается, если вы не обновляете размеры фрейма во время состояния вызова и других крайних случаев.