针对iOS13一些适配问题的处理整理,持续更新

2019-09-25  本文已影响0人  JanzenChen

以下是iOS13一些适配问题的暂时解决方案,整理以下,希望能帮到大家。

UITextField 异常

在设置leftView 左按钮时,如果使用的是UIImageView,UIImageView的大小会自动根据图片大小自动缩放内容大小,即会出现图片无法按照意图显示的问题


// Confuse in iOS13
UIImageView *imageIcon = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
//search_icon  19*19
imageIcon.image = [UIImage imageNamed:@"search"];
imageIcon.contentMode = UIViewContentModeCenter;
UITextField *txtSearch = [[UITextField alloc] init];
txtSearch.leftView = imageIcon;


解决方案

UIImageView *imageIcon = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
//search  19*19
UIView *leftView = [UIView.alloc initWithFrame:CGRectMake(0, 0, 40, 20)];
UIView *contView = [UIView.alloc initWithFrame:CGRectMake(12, 1, 19, 19)];
contView.backgroundColor = [UIColor colorWithPatternImage:ASImage(@"search")];
UITextField *txtSearch = [[UITextField alloc] init];
txtSearch.leftView = imageIcon;

UITextField 通过KVC方式修改空白提示语颜色 崩溃

iOS13中,无法使用KVC修改占位文字的颜色,使用此方式会闪退

[UITextField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor”];

解决方案


控制器模态跳转异常

iOS新增模态方式UIModalPresentationAutomatic,并且修改过场动画上下文机制,默认调整为了卡片样式。


typedef NS_ENUM(NSInteger, UIModalPresentationStyle) {
    UIModalPresentationFullScreen = 0,
    UIModalPresentationPageSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),
    UIModalPresentationFormSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),
    UIModalPresentationCurrentContext API_AVAILABLE(ios(3.2)),
    UIModalPresentationCustom API_AVAILABLE(ios(7.0)),
    UIModalPresentationOverFullScreen API_AVAILABLE(ios(8.0)),
    UIModalPresentationOverCurrentContext API_AVAILABLE(ios(8.0)),
    UIModalPresentationPopover API_AVAILABLE(ios(8.0)) API_UNAVAILABLE(tvos),
    UIModalPresentationBlurOverFullScreen API_AVAILABLE(tvos(11.0)) API_UNAVAILABLE(ios) API_UNAVAILABLE(watchos),
    UIModalPresentationNone API_AVAILABLE(ios(7.0)) = -1,
    UIModalPresentationAutomatic API_AVAILABLE(ios(13.0)) = -2,
};

解决方案

#import "UIViewController+Presented.h"

@implementation UIViewController (Presented)

+ (void)load {
    vpswizzleMethod([self class], @selector(presentViewController:animated:completion:), @selector(swizzled_presentViewController:animated:completion:));
}

- (void)swizzled_presentViewController:(UIViewController *)vc animated:(BOOL)animated completion:(void (^)(void))completion {
    // 屏蔽iOS13 模态半推框 导致vc声明周期不调用造成程序逻辑丢失的问题
    vc.modalPresentationStyle = UIModalPresentationFullScreen;
    [self swizzled_presentViewController:vc animated:animated completion:completion];
}

void vpswizzleMethod(Class class, SEL originalSelector, SEL swizzledSelector) {
    Method originalMethod = class_getInstanceMethod(class, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
    BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
    if (didAddMethod) {
        class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
    } else {
        method_exchangeImplementations(originalMethod, swizzledMethod);
    }
}

@end

上一篇 下一篇

猜你喜欢

热点阅读