SWTableViewCell 适配iOS14

问题:侧滑不能使用

经过查看发现是iOS14的侧滑失败,使用的是第三方 SWTableViewCell

怎么回事呢?

最终使用xcode查看层的工具看出问题 如下图

SWTableViewCell 适配iOS14_第1张图片
image.png

可以看到UITableViewCellContentView 没有在scrollview上,并且它们两个并行且UITableViewCellContentView在上面,这样scrollview怎么可能滚动

经此查找代码如下

    // Add the cell scroll view to the cell
    UIView *contentViewParent = self;
    UIView *clipViewParent = self.cellScrollView;
    if (![NSStringFromClass([[self.subviews objectAtIndex:0] class]) isEqualToString:kTableViewCellContentView])
    {
        // iOS 7
        contentViewParent = [self.subviews objectAtIndex:0];
        clipViewParent = self;
    }
    NSArray *cellSubviews = [contentViewParent subviews];
    [self insertSubview:self.cellScrollView atIndex:0];
    for (UIView *subview in cellSubviews)
    {
        [_contentCellView addSubview:subview];
    }

这里取出self.subviews中的第0个判断是否是UITableViewCellContentView
如果不是就取出来 作为contentViewParent

这里打印我们看下iOS14是什么样的?


SWTableViewCell 适配iOS14_第2张图片
image.png

可以看到第1个是UITableViewCellContentView
这样我们就找到原因了 然后修改下代码

    // Add the cell scroll view to the cell
    UIView *contentViewParent = self;
    UIView *clipViewParent = self.cellScrollView;
    
    BOOL isHaveContentView = NO;
    for (UIView *view in self.subviews) {
        if ([NSStringFromClass([view class]) isEqualToString:kTableViewCellContentView]) {
            isHaveContentView = YES;
        }
    }
    
    if (!isHaveContentView)
    {
        // iOS 7
        contentViewParent = [self.subviews objectAtIndex:0];
        clipViewParent = self;
    }
    NSArray *cellSubviews = [contentViewParent subviews];
    [self insertSubview:self.cellScrollView atIndex:0];
    for (UIView *subview in cellSubviews)
    {
        [_contentCellView addSubview:subview];
    }

在运行 解决了问题

这里不知道为什么使用iOS14.2的模拟器没有这个问题

你可能感兴趣的:(SWTableViewCell 适配iOS14)