如何在 ViewController 及其 NavigationController 上添加 UIview

Posted

技术标签:

【中文标题】如何在 ViewController 及其 NavigationController 上添加 UIview【英文标题】:How to add UIview over a ViewController and its NavigationController 【发布时间】:2013-10-31 16:29:24 【问题描述】:

我有一个ViewController 和一个NavigationController,当我按下ViewController 按钮时,我想在ViewController 上添加一个带有一些按钮的半透明UIView,问题是我不能把@987654325 @超过NavigationBar。我该如何解决这个问题?

这是我的代码(很简单)

-(void)setOpacityView

    opacityVw = [[UIView alloc] initWithFrame:self.view.bounds];
    opacityVw.backgroundColor = [[UIColor alloc] initWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];


    WPCustomButton *closeBtn = [[WPCustomButton alloc] initWithFrame:CGRectMake(230, 10, 80, 20)];
    [closeBtn setTitle:@"Close X" forState:UIControlStateNormal];
    [closeBtn setBackgroundColor:[UIColor clearColor]];
    [closeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [closeBtn addTarget:self action:@selector(closeView) forControlEvents:UIControlEventTouchUpInside];
    [opacityVw addSubview:closeBtn];


// ---------------------------------------------------------------------------------------------------------------------

#pragma mark - Button methods

-(void) closeView

    [opacityVw removeFromSuperview];



-(void)setProfileImage

    [self setOpacityView];

    [self.view addSubview:opacityVw];

【问题讨论】:

【参考方案1】:

我回答了类似的问题here

试试这样的:

-(void)setProfileImage

    [self setOpacityView];
    [self.navigationController.view addSubview:opacityVw];

【讨论】:

【参考方案2】:

改为将其添加到 AppDelegate 的 UIWindow

- (void)setProfileImage

    [self setOpacityView];

    [ [[UIApplication sharedApplication] delegate].window addSubview:opacityVw];

不要忘记更改视图大小:

opacityVw = [[UIView alloc] initWithFrame:[[[UIApplication sharedApplication] delegate]window].bounds];

【讨论】:

它不起作用。我认为是因为这个 viewController 不是 appDelegate 之后的下一个【参考方案3】:

您可以创建 MainViewController 并将其作为您的 window.rootViewController。将您的 navigationController 添加到此 MainViewController。之后,您将视图添加到您的 mainViewController,它将位于导航控制器的顶部。

【讨论】:

【参考方案4】:

简单点:

-(void)setProfileImage

    [self setOpacityView];
    self.navigationController.navigationBarHidden = YES;
    [self.view insertSubview:opacityVw aboveSubview:self.view];


-(void) closeView

    [opacityVw removeFromSuperview];
    self.navigationController.navigationBarHidden = NO;

【讨论】:

我已经编辑了我的帖子,因为我阅读您的问题太快了,它应该可以按要求工作 除了他什么也没说隐藏导航栏。他也希望导航栏上的半透明视图。

以上是关于如何在 ViewController 及其 NavigationController 上添加 UIview的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有导航栏的 View Controller 内使用 Nav 推送 UIViewController

iOS Present Viewcontroller 出现黑屏

第二十六篇因为自定item(nav)而使系统右滑返回手势失效的解决方法

加载 ViewController Swift - 黑屏

在Storyboard中,如何让view从状态栏顶部开始布局

在组件内使用列表项 - Vue2