UITableView section 圆角 阴影
在UITableView实现图片上面的效果,百度一下看了别人的实现方案有下面2种:
1.UITableView section里面嵌套UITableView然后在上面实现圆角和阴影, 弊端代码超多我看了下就不想看了立马放弃.
2.UICollectionView 实现, 但是我原来的UI是UITableView写的就懒得重写.
找来找去都没一种简单的实现方案,自己有事了几个绘图API,没有达到图片的效果.想了两天灵光一闪,一个超简单的方法就能实现section+圆角+阴影 . 分享出来给有需要的人
UITableViewCell 是系统的没有自定义,直接在上面插入一个UIView做阴影图层就能达到效果,原理就是利用clipsToBounds属性UIView的layer图层超出view的部分不显示
贴代码
//============阴影层=========== @interface SubCellShadowView :UIView @property (nonatomic, strong) CAShapeLayer *shadowLayer; @property (nonatomic, strong) CALayer *separatorLine; @end @implementation SubCellShadowView @end
//===============Cell==================
@interface SubCell : UITableViewCell
@property (nonatomic, strong) SubCellShadowView *bgView;
@property (nonatomic, strong) NSIndexPath *indexPath;
@property (nonatomic) NSInteger rowInSection;//每一组的行数
@end
@implementation SubCell
- (void)awakeFromNib {
[super awakeFromNib];
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.clipsToBounds = NO;
SubCellShadowView *bgView = [[SubCellShadowView alloc] init];
[self insertSubview:bgView atIndex:];
self.bgView= bgView;
CAShapeLayer *shadow = [CAShapeLayer layer];
shadow.shadowColor = [UIColor blackColor].CGColor;
shadow.shadowOffset=CGSizeMake(,);
shadow.shadowOpacity=0.15;
[bgView.layeraddSublayer:shadow];
bgView.shadowLayer= shadow;
CALayer*line = [CALayerlayer];
line.backgroundColor = [UIColor groupTableViewBackgroundColor].CGColor;
[bgView.layeraddSublayer:line];
bgView.separatorLine= line;
}
-(void)layoutSubviews{
[super layoutSubviews];
UIBezierPath*bgBezierPath =nil;
CGFloat cornerRaduis =7.0;//觉得阴影大的可以把半径调小,半径大的话阴影面积会变大
if(self.indexPath.row== && self.rowInSection==) {//单组单行
self.bgView.clipsToBounds=NO;
self.bgView.frame=self.bounds;
CGRect rect = UIEdgeInsetsInsetRect(self.bgView.bounds, UIEdgeInsetsMake(, , , ));
bgBezierPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(cornerRaduis, cornerRaduis)];
}elseif(self.indexPath.row==) {// 第一行
self.bgView.clipsToBounds=YES;
self.bgView.frame = UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(-, , , ));
CGRect rect = UIEdgeInsetsInsetRect(self.bgView.bounds, UIEdgeInsetsMake(, , , ));
bgBezierPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(cornerRaduis, cornerRaduis)];
}elseif(self.indexPath.row==self.rowInSection-) {// 最后一行
self.bgView.clipsToBounds=YES;
self.bgView.frame = UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(, , -, ));
CGRect rect = UIEdgeInsetsInsetRect(self.bgView.bounds, UIEdgeInsetsMake(, , , ));
bgBezierPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight) cornerRadii:CGSizeMake(cornerRaduis, cornerRaduis)];
}else{// 中间行
self.bgView.clipsToBounds=YES;
self.bgView.frame = UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(, , , ));
CGRect rect = UIEdgeInsetsInsetRect(self.bgView.bounds, UIEdgeInsetsMake(, , , ));
bgBezierPath = [UIBezierPathbezierPathWithRect:rect];
}
self.bgView.shadowLayer.path= bgBezierPath.CGPath;
self.bgView.shadowLayer.shadowPath= bgBezierPath.CGPath;
self.bgView.shadowLayer.fillColor = [UIColor whiteColor].CGColor;
//分割线 非单组单行 非最后一行
if(!(self.indexPath.row==&&self.rowInSection==) && !(self.indexPath.row==self.rowInSection-)) {
self.bgView.separatorLine.frame = CGRectMake(self.bgView.frame.origin.x+, self.bgView.frame.size.height-, self.bgView.frame.size.width-*, 1.0);
}
}
@end
UITableView section 圆角 阴影的更多相关文章
- IOS UIView圆角,阴影,边框,渐增光泽
圆角 sampleView.layer.cornerRadius = 2.5; // 圓角的弧度sampleView.layer.masksToBounds = YES; 阴影 sampleView. ...
- UWP Button添加圆角阴影(三)
原文:UWP Button添加圆角阴影(三) Composition DropShadow是CompositionAPI中的东西,使用Storyboard设置某个属性,就是频繁的触发put_xxx() ...
- UWP Button添加圆角阴影(二)
原文:UWP Button添加圆角阴影(二) 阴影 对于阴影呢,WindowsCommunityToolkit中已经有封装好的DropShadowPanel啦,只要引用Microsoft.Toolki ...
- UWP Button添加圆角阴影(一)
原文:UWP Button添加圆角阴影(一) 众所周知,17763之前的UWP控件,大部分是没有圆角属性的:而阴影也只有17763中的ThemeShadow可以直接在xaml中使用,之前的版本只能用D ...
- CSS3圆角,阴影,透明
CSS实现圆角,阴影,透明的方法很多,传统的方法都比较复杂,用CSS3就方便很多了,虽然现在各浏览器对CSS3的支持还不是很好,但不久的将来CSS3就会普及. 1.圆角 CSS3实现圆角有两种方法. ...
- Qt之圆角阴影边框
Qt的主窗体要做出类似WIN7那种圆角阴影边框,这一直是美工的需求. 这里是有一些门道的,尤其是,这里藏着一个很大的秘密. 这个秘密是一个QT的至少横跨3个版本,存在了2年多的BUG... https ...
- 让group tableview每个section拥有阴影和圆角
#import <UIKit/UIKit.h> @class GroupShadowTableView; @protocol GroupShadowTableViewDelegate &l ...
- iOS tableView Section圆角方案
给tableView的section设置圆角 首先给让cell左右偏移一点的距离,通过重写cell的setframe方法来实现 -(void)setFrame:(CGRect)frame{ CGFlo ...
- 设置UITableView section间距
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 0 ...
随机推荐
- hive参数配置详细
hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.i ...
- 初学spring笔记
简单hello world 项目,了解IOC 反转控制
- 批处理脚本+adb命令
app的测试过程中,有一些重复性的繁琐工作,可以采用用批处理脚本+adb命令方式来代替 说明: (1)等待时间我用的ping命令替代的,比较简单直观 (2)我采取的是用坐标定位,后续会使用控件来定位 ...
- LRU算法的Java实现
LRU全称是Least Recently Used,即最近最久未使用的意思. LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小.也就是说,当限定的空间已 ...
- mui底部选项卡切换实现
MUI提供了两种webview和div模式,来实现底部选项卡切换 效果相同,div是在同一个页面实现所有切换块的页面,根据id导航,而webview是由多个页面组成,形成页面之间的来回跳转
- WDA基础十五:POPUP WINDOW
1.组件控制器定义属性: 2.实现popup方法: METHOD stock_popup . DATA: l_cmp_api TYPE REF TO if_wd_component, l_window ...
- swoole框架和其所涉及的协议
网络知识基础 OSI协议 :应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 tcp通信 TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道(三次握手.四次挥手). ...
- 将对象转成 json 以及 将字符串 hash(SHA1) 加密
如下: /// <summary> /// 生成 Json /// </summary> /// <param name="obj"></ ...
- zzw_非root用户安装python3.5
目的:不想改变linux 自带的python,只想要用特定的非root用户运行特定版本的python 1.进入非root用户 2.新建一个python3.5的安装目录 [a4_csbdc@bdc816 ...
- [la P4487] Exclusive-OR
[la P4487] Exclusive-OR Time limit 3000 ms OS Linux You are not given n non-negative integers X0, X ...