SideMenu 黑色视图

Posted

技术标签:

【中文标题】SideMenu 黑色视图【英文标题】:SideMenu black view 【发布时间】:2012-10-30 09:29:32 【问题描述】:

我正在尝试制作侧边栏菜单,但我遇到了一点问题。

我解释一下:

    我创建了一个 UIViewController,我称之为 sideMenuViewController

    在我的 viewController 类(初始视图控制器)中,在头文件中,我导入了我的类 SideMenuViewController 并写道:

    -(IBAction)openSideMenu:(id)sender;

    @property(nonatomic, retain) SideMenuViewController *sideMenu;
    

openSideMenu 操作与菜单按钮相关联。

我是这样实现这个方法的:

- (IBAction)openSideMenu:(id)sender 
    CGRect destination = self.view.frame;

    if(destination.origin.x > 0)
        destination.origin.x = 0;
    else
        destination.origin.x += SideMenuX;
    

    [UIView animateWithDuration:0.4 animations:^
        self.view.frame = destination;
    completion:^(BOOL finished) 
        if(finished)

        
    ];

SideMenuX 是一个宏:#define SideMenuX 154.4

我的 viewDidLoad 方法如下所示:

- (void)viewDidLoad

    [super viewDidLoad];
    _sideMenu = [[SideMenuViewController alloc] init];
    [self.view sendSubviewToBack:_sideMenu.view];
    // Do any additional setup after loading the view, typically from a nib.

问题是当我点击菜单按钮时,我得到一个黑屏,而不是我的侧边菜单视图。

提前谢谢你!

【问题讨论】:

【参考方案1】:

两个问题:

    您根本没有添加 sideMenu。尝试将其添加到父视图 (self.view.superview),在您的情况下很可能是 UIWindow:
     [self.view.superview insertSubview:_sideMenu.view belowSubview:self.view];
    如果您正在使用导航控制器,请使用 self.navigationController.view 而不是 self.view。 不确定您是使用 NIB 还是 Storyboard 初始化视图(如果没有,请参见下文)。

这是working example。我在情节提要中创建了左视图控制器,如下所示:

在情节提要上抛出一个 View Controller 组件。 选择左列的控制器,然后转到右列的 Identity Inspector (alt+cmd+3): 将类设置为SideMenuViewController 将情节提要 ID 设置为 SideMenuViewController

在 viewDidLoad 中实例化控制器

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
self.sideMenu = (SideMenuViewController*)[storyboard instantiateViewControllerWithIdentifier:@"SideMenuViewController"];

然后将其作为父视图的子级插入。


(回答下面的评论)

这行是问题所在:

[self.view.superview addSubview:_sideMenu.view];

在基于 NIB 的项目中,superview 是 UIWindow,但在 Storyboard 项目中,UIViewController 的 self.view.superview 为 nil。您可以解决这个问题,例如,添加一个 UINavigationViewController。请按以下步骤操作:

加入“导航控制器” 删除它指向的视图控制器。 按 Ctrl 并将指针从 UINavigationController 拖到您的视图控制器,然后在出现的对话框中选择“根视图控制器”。 将指向视图控制器的箭头拖到 UINavigationController(标记初始视图控制器的那个,而不是来自 UINavigationController 的那个)。

然后将代码更改为

_sideMenu = [[SideMenuViewController alloc] initWithNibName:@"SideMenuViewController" bundle:nil];
[self.navigationController.view.superview insertSubview:_sideMenu.view belowSubview:self.navigationController.view];

要隐藏 UINavigationController 的导航栏,请在 Storyboard 中选择它,然后单击 Attributes Inspector 中的隐藏 (alt+cmd+4)。

【讨论】:

感谢您的回答。我添加了这一行:[self.view.superview insertSubview:_sideMenu.view belowSubview:self.view]; 但它不起作用:/ 呃,也许 SideMenuViewController 缺少 NIB?使用 File > New File > User Interface > Empty 创建一个,将其命名为 SideMenuViewController,选择新的 SideMenuViewController.xib,单击 File 的所有者,转到 Identity Inspector (alt+cmd 3) 并将类设置为 SideMenuViewController。或者您可以在我上面发布的故事板中创建一个定义。或者,您可以在github中创建一个示例项目并发布地址。 谢谢!我使用了你提供的 github 项目来实现我自己的类,它可以工作! 我在 Github 上添加了项目,我想知道为什么应用程序显示黑页。这是链接:github.com/ali59a/SideMenuTest【参考方案2】:

您所看到的都是黑色的,因为您没有添加侧面菜单视图。试试这个:

- (void)viewDidLoad 
      [super viewDidLoad];
      _sideMenu = [[SideMenuViewController alloc] init];
      [self.view addSubview:_sideMenu.view];
      [self.view sendSubviewToBack:_sideMenu.view];

【讨论】:

以上是关于SideMenu 黑色视图的主要内容,如果未能解决你的问题,请参考以下文章

在关闭视图 iAds 在 ios 5 ipad 中变为黑色。(深黑色)

视图在方向更改时旋转时的黑色背景

uiviewcontroller 黑色

视图控制器顶部的黑色空间

滚动视图时黑色到清晰渐变消失

快速高效地获取屏幕(视图)黑色像素