UIContextualAction无色、透明问题
在iOS 11中,新增了UIContextualAction用于tableView的侧滑按钮展示,但是在使用过程中,出现了一个很奇怪的问题,UIContextualAction中的imageView在部分机型上无法展示。
通过查看页面的层级,发现imageView是存在的,只是变成了无色、透明。(如图)
参考了文章《关于UIContextualAction的Image》的方案,解决了问题。经过测试,iPhone 7 Plus,iOS 13.4.1正常;iPhone 6,iOS 12.4.2有问题。同时作者在文章中进行了以下提示:
iOS11 cell的willTransitionToState方法并不会每次action出来的时候都被调用,iOS10及以下没有问题,而iOS11这里写调整的代码只会起一次作用(可能是Xcode9的bug = =)。iOS10及以下在willTransitionToState的时候调整即可。
其中部分评论说不起作用,应该是使用方式不正确,使用步骤可以参考:
1.新建一个xxxTableView,Subclass of tableView
2.在xxxTableView中粘贴以下代码
3.将UIContextualAction所属的tableView继承xxxTableView
4.再次运行即可看到隐藏的按钮(如图)
以下是相关代码:
#define k_ash_action_img [@"__action" hash]
- (void)layoutSubviews {
[super layoutSubviews];
if (@available(iOS 11.0, *)) {
if (self.editing)
for (UIView *swipeActionPullView in self.subviews)
{
if([swipeActionPullView isKindOfClass:NSClassFromString(@"UISwipeActionPullView")]){
for (UIView *swipeActionStandardButton in swipeActionPullView.subviews) {
if ([swipeActionStandardButton isKindOfClass:NSClassFromString(@"UISwipeActionStandardButton")]) {
for (UIImageView *imageView in swipeActionStandardButton.subviews) {
if ([imageView isKindOfClass:[UIImageView class]]) {
if ([imageView viewWithTag:k_ash_action_img]==nil) {
UIImageView *addedImageView = [[UIImageView alloc] initWithFrame:imageView.bounds];
addedImageView.tag = k_ash_action_img;
addedImageView.image= [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[imageView addSubview:addedImageView];
}
break;
}
}
}
}
}
}
}
}