Как обновить uiview после viewdidload? - PullRequest
1 голос
/ 06 апреля 2019

Я работаю над проектом, который я не запустил, и теперь мы обнаружили ошибку в первом VC: Первый viewcontroller имеет меню верхней панели и меню нижней панели. остальное - контейнерное представление, которое показывает необходимые контроллеры представления. В 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 Ответ

1 голос
/ 10 апреля 2019

Вы можете попробовать переместить этот код в viewWillAppear:animated или viewDidAppear:animated.

IIRC, переменные, к которым вы пытаетесь обратиться, будут установлены при вызове одного (или обоих) из этих методов.

...