作者:az旺成电料 | 来源:互联网 | 2023-01-17 14:26
使用自定义UITableViewCell,我试图更改tableViewCell的“删除”按钮的高度。我已经尝试过此处提供的所有解决方案。
每个人都提到过,在customTableViewCell类中,我们需要重写layoutSubviews
方法并进行迭代self.subViews
以找到一个应该等于UITableViewCellDeleteConfirmationView的子视图,或者在其他iOS版本中,它是UITableViewCellDeleteConfirmationControl,因此我使用了以下代码:
- (void)layoutSubviews
{
[super layoutSubviews];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.0f];
for (UIView *subView in self.subviews) {
NSLog(@"subview: %@", self.subviews);
if([NSStringFromClass([subView class]) rangeOfString:@"Delete"].location != NSNotFound) {
CGRect newFrame = subView.frame;
newFrame.size.height = 87;
subView.frame = newFrame;
}
}
[UIView commitAnimations];
}
但是self.subView
只有两种观点
UITableViewCellContentView
UITableViewCellSeparatorView
如何在iOS 10+中获取tableViewCell的删除按钮视图?
编辑
这是我的视图层次结构:
1> Muhammad Uma..:
对于任何正在努力解决相同问题的人。
在iOS10 +中,UITableView的删除按钮的视图层次结构已更改。现在它位于UITableView-UISwipeActionPullView- UISwipeActionStandardButton下
因此,现在需要代替layoutSubviews
迭代自定义UITableViewCell的方法,而需要迭代UITableView子视图才能获取UISwipeActionStandardButton。我发现tableView的willBeginEditingRowAtIndexPath
委托是合适的地方,
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
for (UIView *subview in tableView.subviews) {
if ([NSStringFromClass([subview class]) isEqualToString:@"UISwipeActionPullView"]) {
if ([NSStringFromClass([subview.subviews[0] class]) isEqualToString:@"UISwipeActionStandardButton"]) {
CGRect newFrame = subview.subviews[0].frame;
newFrame.size.height = 72;
subview.subviews[0].frame = newFrame;
//Other changes on this view can also be applied like
subview.subviews[0].backgroundColor = [UIColor redColor];
subview.subviews[0].layer.cornerRadius = 12;
subview.subviews[0].layer.masksToBounds = YES;
}
}
}
}