UIPopoverView

时间:2016-08-03 17:41:54

标签: ios objective-c

我无法以UITableView半透明的Apple风格制作UIPopoverView。这里是我正在使用的代码,对我已经尝试过但发现不起作用的评论。任何帮助非常感谢!

请注意,我无法使用Storyboard segues,因为我从动态tableview单元格单元格原型启动此弹出窗口。

popoverViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TargetPickVC"];
popoverViewController.target = _target;
//popoverViewController.tableView.backgroundColor = [UIColor clearColor]; // Does nothing
//popoverViewController.tableView.alpha = 0.1;  // Does make tableview text lighter

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:popoverViewController];
nav.modalPresentationStyle = UIModalPresentationPopover;

UIPopoverPresentationController *popPC = nav.popoverPresentationController;

//popPC.containerView.alpha = 0.1; // Does nothing

nav.popoverPresentationController.sourceRect = ((UITableView*)[self.tableView cellForRowAtIndexPath:indexPath]).frame;
nav.popoverPresentationController.sourceView = self.view;
popPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
popPC.delegate = self;

//popoverViewController.tableView.backgroundColor = [UIColor clearColor]; // No
//popoverViewController.view.backgroundColor = [UIColor clearColor]; // visible
//nav.view.backgroundColor = [UIColor clearColor]; // results

dispatch_async(dispatch_get_main_queue(), ^{
    [self presentViewController:nav animated:YES completion:nil];
});

目前的结果如下: Opague popover

1 个答案:

答案 0 :(得分:0)

首先,您实际上可以将segues与动态原型一起使用 - 只需在按 ctrl 时单击原型,然后拖动到目标场景。您可以在-prepareForSegue:method

中预配置该VC

如果您在iPad上执行此操作,请添加此行nav.popoverPresentationController.backgroundColor = [UIColor clearColor]; 它应该有助于从你的popover中删除白色背景。但它在iPhone上没有帮助 - 你会看到黑色背景,这是主窗口的背景。要解决此问题,您需要将 UIModalPresentationPopover 更改为专门针对iPhone的 UIModalPresentationOverCurrentContext

但如果它不会得到帮助而您将继续获得白色背景 - 尝试将背景颜色设置为视图层次结构的所有层 - 导航控制器,TargetPickVC和巡视表视图。喜欢这个

popoverViewController.tableView.backgroundColor = [UIColor clearColor];
popoverViewController.view.backgroundColor = [UIColor clearColor]; 
nav.view.backgroundColor = [UIColor clearColor];

希望它会有所帮助