这些天项目中遇到需要修改tableViewCell左滑时的删除button的frame,网上找了好多都是自定义的,可是我仅仅需要的是修改下frame,完全没有必要自定义一个.挖了好久,终于弄出来了.方法原理是,在cell左滑时必定会调用方法layoutSubviews,那么我去重写cell的layout方法,遍历找到deleteButton修改他的frame不就可以了吗.于是得到如下代码:
- (void)layoutSubviews { [super layoutSubviews]; //修改删除按钮的frame for (UIView *subview in self.subviews) { NSString *name = NSStringFromClass([subview class]); if ([name isEqualToString:@"UITableViewCellDeleteConfirmationView"]) { //这里获得的是deleteButton的父视图,改变的是父视图的frame CGRect frame = subview.frame; //此处修改frame subview.frame = frame; } } } ok,这样当你左滑时得到你需要的删除button的frame.但是还没完,如有仅仅是这样则会出现一个BUG: 当你真正去删除一个cell时,你就会发现删除button的frame出现其他变化,比如说我需要改变的是button的height,那么,当我删除cell时,删除button会拉伸的很长(改变frame其他参数会发生什么我没有测试过).
本人资料查询能力一般般,所以没有在网上找到相关资料,于是只能自己往下挖.我在layoutSubviews方法中打印了没有变化阶段的frame,发现在执行删除动画前,deleteConfirmationView的height会变为0,而如果继续执行上面的代码则会重新给deleteConfirmationView的height设置回去,于是有了如下代码:
- (void)layoutSubviews { [super layoutSubviews]; //修改删除按钮的frame for (UIView *subview in self.subviews) { NSString *name = NSStringFromClass([subview class]); if ([name isEqualToString:@"UITableViewCellDeleteConfirmationView"]) { //这里获得的是deleteButton的父视图,改变的是父视图的frame CGRect frame = subview.frame; //在cell发生删除事件时,会先将frame.size.height = 0. //如果此时改变frame会过渡修改frame,发生删除时deleteBtn发生变形的现象. if (frame.size.height > 0) { //此处修改frame subview.frame = frame; } //应该还可以在这里修改deleteButton的其他属性 } } }这样就解决了删除cell动画时,deleteconfirmazionview被拉伸的现象.但有个问题: cell.frame.size.height == 100. 而我改变得高度是90,为什么出现拉伸现象时, 高度明显大于100? 我暂时也找不出原因.而这段代码是否还有其他BUG,也要等以后发现了.