iOS視圖置頂的應用:適配iOS12系統上日期控件被篩選視圖遮擋問題

這是我參與8月更文挑戰的第8天,活動詳情查看: 8月更文挑戰」 juejin.cn/post/698796… 」ios

引言

本文以pod 'PGDatePicker' ,'2.6.9'·爲例子markdown

問題:iOS12系統上日期視圖被篩選視圖遮擋oop

思路:利用運行時API修改第三方SDK的內部實現post

I、iOS視圖置頂方案

讓一個View至於最頂端, 避免被其餘子視圖遮蓋住ui

zPosition : 同級Layer改變顯示順序 bringSubviewToFront: 讓指定子視圖顯示到窗口最前面spa

blog.csdn.net/z929118967/… CSDN ID:u011018979.net

暱稱:#公號:iOS逆向code

II、案例:適配iOS12系統上日期視圖被篩選視圖遮擋問題

適配iOS12系統上日期視圖被篩選視圖遮擋問題orm

背景:爲了適配iOS12系統上日期視圖被篩選視圖遮擋問題blog

在這裏插入圖片描述

方案:修改第三方庫日期視圖的層級

修改PGDatePickManager,在viewWillLayoutSubviews將contentView和dismissView添加到keyWindow

因爲是第三方SDK,可以使用自定義類重寫viewWillLayoutSubviews,可是推薦在分類使用方法交換進行實現

2.1 自定義類重寫viewWillLayoutSubviews

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
    
    self.headerView.style = self.style;
    self.dismissView.frame = self.view.bounds;
    self.contentView.backgroundColor = self.datePicker.backgroundColor;
    if (self.style == PGDatePickManagerStyleSheet) {
        [self setupStyleSheet];
    }else if (self.style == PGDatePickManagerStyleAlertTopButton) {
        [self setupStyleAlert];
    }else {
        [self setupStyle3];
    }
// [self.view bringSubviewToFront:self.contentView];
    [[UIApplication sharedApplication].keyWindow addSubview:_dismissView];
    [[UIApplication sharedApplication].keyWindow addSubview:self.contentView];

}

複製代碼

2.2 在分類使用方法交換讓日期視圖視圖置頂

.h

//PGDatePickManager+ios12.h
#import "PGDatePickManager.h"

NS_ASSUME_NONNULL_BEGIN

@interface PGDatePickManager (ios12)

@end

NS_ASSUME_NONNULL_END

複製代碼

.m

#import "PGDatePickManager+ios12.h"



@implementation PGDatePickManager (ios12)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        NSArray *selStringsArray = @[@"viewWillLayoutSubviews"];
        
        
        [selStringsArray enumerateObjectsUsingBlock:^(NSString *selString, NSUInteger idx, BOOL *stop) {
            NSString *mySelString = [@"sd_" stringByAppendingString:selString];
            
            Method originalMethod = class_getInstanceMethod(self, NSSelectorFromString(selString));
            Method myMethod = class_getInstanceMethod(self, NSSelectorFromString(mySelString));
            method_exchangeImplementations(originalMethod, myMethod);
        }];
    });
}
- (void)sd_viewWillLayoutSubviews{
    
    [self sd_viewWillLayoutSubviews];
    
        [UIApplication.sharedApplication.delegate.window bringSubviewToFront:self.view.superview];

}





@end

複製代碼

see also

iOS視圖置頂方案

mp.weixin.qq.com/s/qj48Sa0vr…

公號:iOS逆向

相關文章
相關標籤/搜索