這是我參與8月更文挑戰的第8天,活動詳情查看: 8月更文挑戰」 juejin.cn/post/698796… 」ios
本文以pod 'PGDatePicker' ,'2.6.9'·
爲例子markdown
問題:iOS12系統上日期視圖被篩選視圖遮擋oop
思路:利用運行時API修改第三方SDK的內部實現post
讓一個View至於最頂端, 避免被其餘子視圖遮蓋住ui
zPosition : 同級Layer改變顯示順序 bringSubviewToFront: 讓指定子視圖顯示到窗口最前面spa
blog.csdn.net/z929118967/… CSDN ID:u011018979.net
暱稱:#公號:iOS逆向code
適配iOS12系統上日期視圖被篩選視圖遮擋問題orm
背景:爲了適配iOS12系統上日期視圖被篩選視圖遮擋問題blog
方案:修改第三方庫日期視圖的層級
修改PGDatePickManager,在viewWillLayoutSubviews將contentView和dismissView添加到keyWindow
因爲是第三方SDK,可以使用自定義類重寫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];
}
複製代碼
.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
複製代碼
iOS視圖置頂方案
公號:iOS逆向