最近开始了自己的第一个项目,到目前为止已经写完了基本的界面,将开发过程中遇到的一些问题列举如下:
自定义cell分割线
首先设置 tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
然后在自定义的cell的实现文件内实现如下的方法
1 2 3 4 5 6 7 8 9 10 11 12
| - (void)drawSeparator{ _separatorlineLayer = [CAShapeLayer layer]; CGMutablePathRef separatorShapePath = CGPathCreateMutable(); [_separatorLayer setFillColor:[UIColor clearColor].CGColor]; [_separatorLayer setStrokeColor:[UIColor headlineColor].CGColor]; _separatorLayer.lineWidth = 0.5f; CGPathMoveToPoint(separatorShapePath, NULL, 0.0f, 0.0f); CGPathAddLineToPoint(separatorShapePath, NULL, WIDTH, 0.0f); [_headlineLayer setPath:separatorShapePath]; CGPathRelease(separatorShapePath); [self.contentView.layer addSublayer:_separatorLineLayer]; }
|
其中,_separatorLayer
是CAShapeLayer
的实例,setStrokeColor
方法设定了线的颜色,CGPathMoveToPoint
和CGPathAddLineToPoint
设定了线的起始点。
同理,可以类似地实现画点或者更为复杂形状的效果。
iOS8之后cell的动态高度计算
首先使用autolayout布局,且确保cell的contentView至少top和bottom都和cell内部的View建立了约束。之后添加如下代码
1 2
| tableView.estimatedRowHeight = 60.0f; tableView.rowHeight = UITableViewAutomaticDimension;
|
需要注意的是,必须要为tebleView的estimiatedRowHeight属性设定值。
返回键盘的高度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| - (void)viewDidLoad{ [super viewDidLoad]; //注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; }
- (void)dealloc { //移除通知 [[NSNotificationCenter defaultCenter]removeObserver:self]; }
- (void)keyboardWillShow:(NSNotification *)notification{ //键盘弹出时调用 NSDictionary * userInfo = [notification userInfo]; NSValue * frameValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]; CGRect keyboardRect = [frameValue CGRectValue]; NSInteger height = keyboardRect.size.height; }
- (void)keyboardWillHide:(NSNotification *)notification{ //键盘隐藏时调用 }
|
height中储存的即为当前键盘的高度
小心block导致的retain cycle
如果在block中需要访问本类的实例变量,需要使用
__weak UIViewController * weakSelf = self;
self持有了block,而block通过捕获self来访问实例变量,导致保留换的产生,通过__weak
打破保留环。