如何在viewdidload之后更新uiview?

问题描述 投票:1回答:1

我正在开发一个我没有开始的项目,现在我们在第一个VC上发现了一个错误:第一个viewcontroller有一个顶栏菜单和一个底栏菜单。其余的是一个containerview,显示所需的viewcontrollers。在viewDidLoadthis方法被调用:


    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点,topPaddingand bottomPadding仍然是0,因此框架没有设置属性。如果我之后更改了contentViewFrame高度,它在视图中不会发生任何变化。我试过了:

viewDidLayoutSubviews layoutIfNeeded layoutSubviews

和其他一些没有帮助的方法。当我打印contentViewFrameheight它已经改变但没有明显的效果,所以我错过了我做错了...也许上面的方法之一,我没有使用正确的视图或在适当的时刻?或者是别的什么?

谢谢

ios objective-c autolayout size screen
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.