这是我参与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逆向