viewdidload后如何更新uiview?

时间:2019-04-06 09:24:45

标签: ios objective-c autolayout size screen

我正在一个尚未开始的项目上工作,现在我们在第一个VC上发现了一个错误: 第一个视图控制器具有顶部栏菜单和底部栏菜单。其余的是一个容器视图,其中显示了所需的视图控制器。 在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点,topPaddingbottomPadding仍为0,因此帧设置不正确。 而且,如果我之后更改contentViewFrame的高度,则视图中没有任何变化。我尝试过:

viewDidLayoutSubviews layoutIfNeeded layoutSubviews

和其他无济于事的方法。当我打印contentViewFrame高度时,它发生了变化,但是没有可见的效果,因此我错过了我做错的事情...也许是上述方法之一,我没有在适当的视图或适当的位置使用时刻?还是其他?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试将此代码移至viewWillAppear:animatedviewDidAppear:animated

IIRC,将在调用这些方法中的一个(或两个)方法时设置您要访问的变量。