这就是我的观点:
这就是我想要的方式(忽略文字颜色)
您可以看到标题之间的视图应该被清除。但那并没有发生 这就是我实现模态ViewController的方法:
ActivityFilterViewController *filter = [[ActivityFilterViewController alloc] init];
filter.view.backgroundColor = [UIColor clearColor];
[filter setModalPresentationStyle:UIModalPresentationCurrentContext];
[self presentViewController:filter animated:YES completion:nil];
ActivityFilterViewController :
我已将UITableView
设置为已分组,并将部分页眉和页脚的高度设置为10.并且还清除了标题视图的背景颜色。
答案 0 :(得分:0)
如果Privacy Parameter
,则应将模态演示风格设置为ios version is lower then 8.0
至UIModalPresentationCurrentContext
。像,
self
如果您正在使用导航控制器,
self.modalPresentationStyle = UIModalPresentationCurrentContext;
如果两个navihation控制器到达此视图,那么
self.nnavigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
如果ios版本为 self.navigationController.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
,则模态演示文稿样式应为greater or equal to 8.0
,并且应设置为您要呈现的视图控制器,
UIModalPresentationOverCurrentContext
如果您已进行此设置,请检查您的每个图层的背景颜色是否设置为过滤器VC的 filter.modalPresentationStyle = UIModalPresentationOverCurrentContext;
。
您应该调试视图层次结构以检查它们之间有多少层。
希望这会有所帮助:)
答案 1 :(得分:0)
使用自定义视图控制器。不是ActivityController。 无论如何设计它并在当前环境中呈现它。
不需要UITableView,因为你还是不滚动它。
只需对两个子视图使用圆角。
如果您可以在运行时隐藏一个按钮,则可以使用UIStackView,以便布局自动更改。
答案 2 :(得分:0)
您可以将UITableView
的子视图添加到UIAlertController
。
1 创建UIAlertController。
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
2 使用UITableView
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *detailsView;
//Let's match the cornerRadius the iOS Style
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
detailsView = [[UIVisualEffectView alloc] initWithFrame:CGRectMake(0, -120, alertController.view.frame.size.width-20, 110)];
detailsView.layer.cornerRadius = 15;
} else {
detailsView = [[UIVisualEffectView alloc] initWithFrame:CGRectMake(0, -120, alertController.view.frame.size.width-16, 110)];
detailsView.layer.cornerRadius = 5;
}
detailsView.effect = blurEffect;
detailsView.layer.masksToBounds = YES;
detailsView.alpha = 1;
detailsView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.74];
//Add the UITableView
UITableView *menuTableView = [[UITableView alloc]initWithFrame:detailsView.frame style:UITableViewStylePlain];
[detailsView addSubview:menuTableView];
3 添加操作&子视图并显示UIAlertController
UIAlertAction* resetAction = [UIAlertAction actionWithTitle:@"Reset to default"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action){
//Reset the switches in your UITableViewCells
}];
UIAlertAction* saveAction = [UIAlertAction actionWithTitle:@"Save"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction * action){
//Save
}];
[alertController addAction:resetAction];
[alertController addAction:saveAction];
// Add the Subview with the UITableView
[alertController.view addSubview:detailsView];
[self presentViewController:alertController animated:YES completion:nil];
答案 3 :(得分:0)
步骤1&其他人已经说过下面的2了,但是为了完整答案,我还是会在这里说出来。
第1步,将表格视图背景设置为透明:
self.tableView.backgroundColor = [UIColor clearColor];
第2步,正如您所说的那样,您必须通过覆盖heightForHeaderInSection
方法(在您的情况下为10)来设置高度:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 50.0;
}
第3步,通过覆盖viewForHeaderInSection
方法提供自定义视图( note - 这是您必须将背景颜色设置为清除的位置):
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView * header = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.oTableView.frame.size.width, 10)];
header.backgroundColor = [UIColor clearColor];
return header;
}
第4步,一旦您确认这是显示透明背景(您将在背景中看到下面的视图,就像您在上面和侧面看到的那样然后,您可以专注于在单元格的顶部和底部创建所需的效果。
您可以通过以下两种方式之一完成此操作:
UITableViewCell
实施以创建圆角(如果某个部分中的第一个单元格,则只有左上角和右上角;如果某个部分中的最后一个单元格,则只有左下角和右下角。)viewForHeaderInSection
覆盖中创建的自定义视图,以提供圆角效果(将子视图添加到此方法中返回的header
视图中),但这会增加更多空间顶部(第一个细胞)或顶部和顶部部分中单元格的底部(最后一个单元格)。答案 4 :(得分:0)
试试这个:
viewDidLoad中:
tableView.backgroundColor = [UIColor clearColor];
或以上不起作用,
tableView.backgroundView = nil;