UIContextualAction无色、透明问题

UIContextualAction无色、透明问题

在iOS 11中,新增了UIContextualAction用于tableView的侧滑按钮展示,但是在使用过程中,出现了一个很奇怪的问题,UIContextualAction中的imageView在部分机型上无法展示。

通过查看页面的层级,发现imageView是存在的,只是变成了无色、透明。(如图)

截屏2020-07-07 下午12.29.46.png

参考了文章《关于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.再次运行即可看到隐藏的按钮(如图)

截屏2020-07-07 下午12.34.17.png

以下是相关代码:


#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;

                           }

                       }

                   }

               }

           }

       }

   }

}

你可能感兴趣的:(UIContextualAction无色、透明问题)