这个问题在这里已经有一个答案:>
iOS 7 TableView like in Settings App on iPad14个
自从引入iOS7以来,Apple( confirmed here)将删除UITableView的分组样式的单元格的圆角.不过,我相信有聪明的人在那里建立了解决办法.
自从引入iOS7以来,Apple( confirmed here)将删除UITableView的分组样式的单元格的圆角.不过,我相信有聪明的人在那里建立了解决办法.
请帮助我和许多其他iOS程序员,发布您的解决方法,以便在此线程中的iOS7中的UITableViewStyleGrouped中的单元格圆角.这将是非常感谢!
解决方法
只需在代码中添加以下UITableView代理方法即可.它真的帮助我像iOS7中的表视图一样的问题.尝试以下代码,可能也解决了您的问题:
- (void)tableView:(UITableView *)tableView willdisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell respondsToSelector:@selector(tintColor)]) {
if (tableView == tblProfileDetails) { // self.tableview
CGFloat cornerRadius = 5.f;
cell.backgroundColor = UIColor.clearColor;
CAShapeLayer *layer = [[CAShapeLayer alloc] init];
CGMutablePathRef pathRef = CGPathCreateMutable();
CGRect bounds = CGRectInset(cell.bounds,5,0);
BOOL addLine = NO;
if (indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
CGPathAddRoundedRect(pathRef,nil,bounds,cornerRadius,cornerRadius);
} else if (indexPath.row == 0) {
CGPathMovetoPoint(pathRef,CGRectGetMinX(bounds),CGRectGetMaxY(bounds));
CGPathAddArcToPoint(pathRef,CGRectGetMinY(bounds),CGRectGetMidX(bounds),cornerRadius);
CGPathAddArcToPoint(pathRef,CGRectGetMaxX(bounds),CGRectGetMidY(bounds),cornerRadius);
CGPathAddLinetoPoint(pathRef,CGRectGetMaxY(bounds));
addLine = YES;
} else if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
CGPathMovetoPoint(pathRef,CGRectGetMinY(bounds));
CGPathAddArcToPoint(pathRef,CGRectGetMaxY(bounds),CGRectGetMinY(bounds));
} else {
CGPathAddRect(pathRef,bounds);
addLine = YES;
}
layer.path = pathRef;
CFRelease(pathRef);
layer.fillColor = [UIColor colorWithWhite:1.f alpha:0.8f].CGColor;
if (addLine == YES) {
CALayer *lineLayer = [[CALayer alloc] init];
CGFloat lineHeight = (1.f / [UIScreen mainScreen].scale);
lineLayer.frame = CGRectMake(CGRectGetMinX(bounds)+5,bounds.size.height-lineHeight,bounds.size.width-5,lineHeight);
lineLayer.backgroundColor = tableView.separatorColor.CGColor;
[layer addSublayer:lineLayer];
}
UIView *testView = [[UIView alloc] initWithFrame:bounds];
[testView.layer insertSublayer:layer atIndex:0];
testView.backgroundColor = UIColor.clearColor;
cell.backgroundView = testView;
}
}
}