给UITableView边框加阴影

2018/8/11 posted in  iOS

项目中有个需求要在UITableView加边框阴影

如果你的界面的UITableView是充满整个屏幕的话那么就可以使用这个简单的方法。

  • 方法一
tableView.layer.shadowColor = UIColor(white: 000000, alpha: 0.3).CGColor

tableView.layer.shadowOffset = CGSize(width: -6, height: 6)

tableView.layer.shadowOpacity = 1

tableView.clipsToBounds = false //这句最重要了,不然就显示不出来

问题来了

我的界面UITableview上面有一个固定不动的区域,如果单纯的照上面写的话,就会出现tableview盖住上面的问题
其实就是因为clipsToBounds = false 不对超出边框的部分进行切割。

因为UIScrollview默认clipsToBounds = true,所以你可能之前没有见过超出部分依然还显示在界面。

我的界面如下图所示

如果父视图的clipsToBounds = true那么在上面的子控件的clipsToBounds 也是true

所以必须要在UITableview下面添加一个UIView,可以使用下面的代码

必须要使UITableView的clipsToBounds = true,下面的父视图的clipsToBounds = false

  • 方法二
    self.backView = [[UIView alloc]initWithFrame:CGRectMake(originX, originY, Width,  height)];
    self.backView.layer.shadowColor = [UIColor gh_colorFromHexString:@"#002F81"].CGColor;
    self.backView.layer.shadowOffset = CGSizeMake(0, 2);
    self.backView.layer.shadowOpacity = 0.1;
    self.backView.layer.shadowRadius=8;//设置阴影半径
    self.backView.clipsToBounds = false;
    [self.view addSubview:self.backView];
    
    self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0,0, Width, height) style:UITableViewStylePlain];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView.layer.cornerRadius = KScreenWidth/375 *4;
    self.tableView.layer.masksToBounds = YES;
    self.tableView.tableFooterView = [UIView new];
    [self.backView addSubview:self.tableView];