标签:
---- 说在前面的话
今天分享两个东西: 1.UITableView系统原生分割线,怎么设置顶格?
2.怎么给UIView设置两边是圆角,其它两边是直角的效果?
一.UITableVew自带的分割线,左边有10X的缩进,相信小伙伴们也试过setSeparatorInset这个方法,具体效果自己试吧,反正不管用.如果原型图上是顶格的分割线,怎么办?自定义cell里画一条线?当然可以!但是超麻烦,不是吗?
今天给大家分享一个超简单的方法.遵守<UITableViewDelegate>,在-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath这个代理方法中做一些设置即可.代码如下:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } }
OK 搞定!
二.上一张原型图,说明一下需求
上边就是半边圆角,半边直角的效果.好了,废话不多说,思路如下: 给UIView添加个分类,设定一些枚举值(哪边要圆角),自定义CAShapeLayer,给UIView的layer添加即可,
代码如下:
#import <UIKit/UIKit.h> typedef enum { YYSideStyleLeft, // 左上左下圆角 YYSideStyleTop, // 左上右上圆角 YYSideStyleBottom,// 左上右下圆角 YYSideStyleRight // 右上右下圆角 } YYSideStyle; @interface UIView (estension) /** 设置某两边圆角效果 -- 需要制定bounds */ - (void)roundSide:(YYSideStyle)side; @end #import "UIView+estension.h" @implementation UIView (estension) - (void)roundSide:(YYSideStyle)side { UIBezierPath *maskPath; if (side == YYSideStyleLeft) maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerBottomLeft) cornerRadii:CGSizeMake(5.f, 5.f)]; else if (side == YYSideStyleRight) maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:(UIRectCornerTopRight|UIRectCornerBottomRight) cornerRadii:CGSizeMake(5.f, 5.f)]; else if (side == YYSideStyleTop) maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(5.f, 5.f)]; else maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight) cornerRadii:CGSizeMake(5.f, 5.f)]; CAShapeLayer *maskLayer = [CAShapeLayer layer]; maskLayer.frame = self.bounds; maskLayer.path = maskPath.CGPath; self.layer.mask = maskLayer; [self.layer setMasksToBounds:YES]; }
调用:
[loginBtn roundSide:YYSideStyleRight];
注意点:需设置视图的frame才能显示
OK 搞定!
标签:
原文地址:http://www.cnblogs.com/ly0709/p/5539960.html