美文网首页
TZImagePickerController在阿拉伯语状态下b

TZImagePickerController在阿拉伯语状态下b

作者: YannChee | 来源:发表于2021-08-28 15:50 被阅读0次

    由于项目是海外应用,需要适配阿拉伯语,app内部支持语言切换,当切换阿拉伯语后,app的所有页面布局需要做镜像翻转: 从左往右布局需要改成从右往左布局.

    项目集成了TZImagePickerController 开源框架, 但是在切换成阿拉伯语情况下,TZImagePickerController 的图片预览功能有问题:
    在框架的图片列表页面,点击第一张图片,弹出的预览页面却显示最后一张;点击第二张图片,预览页面却显示倒数第二张,依次类推;

    上了github issues 查了下,发现早在18年是后就有人反馈了这个问题,跟我现在的情况一模一样



    我项目里面使用的是目前最新版 3.6.4 ,依然遇到了这种问题.

    当然不一定是框架本身的bug,也有可能是项目里面切换阿拉伯语过程中,一些runtime 方法影响到了框架 ?

    所以只能修改框架源码来解决问题了.

    经过排查,把问题定位到了TZPhotoPreviewController 这个类,
    这个类的设置 collectionView 的偏移量在阿拉伯语下不对


    由于在阿拉伯语状态下,图片预览滚动方向由 从左到右变成了从右到左,
    根据之前项目经验,我推测可能是collectionView的布局问题;

    我自定义的布局是,定义一个类继承自UICollectionViewFlowLayout重写如下两个方法

    @implementation QYRTLCollectionViewFlowLayout
    
    - (UIUserInterfaceLayoutDirection)effectiveUserInterfaceLayoutDirection {
    
        if ([UIView isRTL]) {
            return UIUserInterfaceLayoutDirectionRightToLeft;
        }
        return UIUserInterfaceLayoutDirectionLeftToRight;
    }
    
    - (BOOL)flipsHorizontallyInOppositeLayoutDirection {
        return [UIView isRTL];
    }
    @end
    

    替换之后问题等到解决;

    接下来,思考的是,如何在改动框架源码最小的情况下,修复那个bug.

    1. 给TZImagePickerConfig 增加一个属性 customPreviewCollectionViewLayout
    1

    为什么要加在这个类里面? 因为设置语言包等方法都在这里,在这里就可以根据不同语言需要包自定义布局传递进去

    NSString *countryStr = UIView.isRTL ? @"ar" : @"en";  [TZImagePickerConfig sharedInstance].languageBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:countryStr ofType:@"lproj"]];
    ......
    .....
     [TZImagePickerConfig sharedInstance].customPreviewCollectionViewLayout = customLayout;
    
    1. 给TZPhotoPreviewController 增加属性


    2. 修改TZPhotoPreviewController 的layout初始化方法


      image.png

    3.找到TZPhotoPreviewController实例化地方,把自定义布局赋值






    相关文章

      网友评论

          本文标题:TZImagePickerController在阿拉伯语状态下b

          本文链接:https://www.haomeiwen.com/subject/uivbiltx.html