Как обновить uiview после viewdidload?

#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, переменные, к которым вы пытаетесь получить доступ, будут установлены при вызове одного (или обоих) из этих методов.