#ios #objective-c #autolayout #size #screen
#iOS #objective-c #автозапуск #размер #экран
Вопрос:
Я работаю над проектом, который я не запускал, и теперь мы обнаружили ошибку в первом VC: первый viewcontroller имеет меню верхней панели и меню нижней панели. остальное — это containerview, который показывает необходимые viewcontrollers. В viewDidLoad
вызывается этот метод:
self.currentIndex = 0;
CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGRect contentViewFrame = screenBounds;
// iPhone X
if (@available(iOS 11.0, *)) {
UIWindow *window = [UIApplication sharedApplication].keyWindow;
CGFloat topPadding = window.safeAreaInsets.top;
CGFloat bottomPadding = window.safeAreaInsets.bottom;
contentViewFrame.origin.y = topPadding 20.0; // 20 p for status bar
contentViewFrame.size.height -= (rootView.bottomBarView.frame.size.height (topPadding 20.0) bottomPadding); // topPadding 20 statusbar
} else {
contentViewFrame.size.height -= rootView.bottomBarView.frame.size.height;
}
self.conversationVC = [[VOCConversationVC alloc] initWithFrame: contentViewFrame];
self.diaryVC = [[VOCDiaryVC alloc] initWithFrame: contentViewFrame];
self.managementVC = [[VOCManagementVC alloc] initWithFrame: contentViewFrame];
self.viewControllerSelected = VOCViewControllerSelectedCommunication;
}
Дело в том, что в ViewDidLoad
точке topPadding
и bottomPadding
по-прежнему 0, поэтому кадры не установлены должным образом.
И если я изменю contentViewFrame
высоту после, это не внесет никаких изменений в представление. Я пытался:
viewDidLayoutSubviews
layoutIfNeeded
layoutSubviews
и некоторые другие методы, которые не помогли. Когда я печатаю contentViewFrame
высоту, она изменяется, но видимых эффектов нет, поэтому я не понимаю, что я делаю неправильно… Может быть, один из вышеупомянутых методов, который я не использую для правильного просмотра или в нужный момент? Или это что-то еще?
Спасибо
Ответ №1:
Вы могли бы попробовать переместить этот код либо в viewWillAppear:animated
, либо viewDidAppear:animated
.
IIRC, переменные, к которым вы пытаетесь получить доступ, будут установлены при вызове одного (или обоих) из этих методов.