羅列一些我這邊的適配點,慢慢補充
flutter 兼容異常崩潰
## mprotect error: 13 (Permission denied
全局配置
<key>UIDesignRequiresCompatibility</key> <true/>
經(jīng)過驗證,info.plist中如果增加了上述的配置后,導(dǎo)航欄以及自定義tabbar的問題的問題都可以修復(fù)
后期導(dǎo)航欄、tabbar還是要去適配的:
導(dǎo)航欄
iOS26 給所有的UIBarButtonItem都增加了一個白色背景,如果只有一個按鈕,那就是圓底白色背景,多個呢會撐開
翻看了iOS26 UIBarButtonItemapi,有兩個新增的屬性
hidesSharedBackground
sharesBackground
嘗試了一下,白色背景果然去掉了,設(shè)置如下:
if(@available(iOS 26.0, *)) {
item.hidesSharedBackground = YES;
item.sharesBackground = NO;
}
為了不全局改,那么hook掉系統(tǒng)設(shè)置UINavigationItem的幾個方法
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// ========== Hook setLeftBarButtonItem: ==========
[self swizzleSelector:@selector(setLeftBarButtonItem:)
withNewSelector:@selector(customSetLeftBarButtonItem:)];
// ========== Hook setRightBarButtonItem: ==========
[self swizzleSelector:@selector(setRightBarButtonItem:)
withNewSelector:@selector(customSetRightBarButtonItem:)];
// 兼容帶動畫的版本(避免漏攔截)
[self swizzleSelector:@selector(setLeftBarButtonItem:animated:)
withNewSelector:@selector(customSetLeftBarButtonItem:animated:)];
[self swizzleSelector:@selector(setRightBarButtonItem:animated:)
withNewSelector:@selector(customSetRightBarButtonItem:animated:)];
// 兼容數(shù)組版本(leftBarButtonItems/rightBarButtonItems)
[self swizzleSelector:@selector(setLeftBarButtonItems:)
withNewSelector:@selector(customSetLeftBarButtonItems:)];
[self swizzleSelector:@selector(setRightBarButtonItems:)
withNewSelector:@selector(customSetRightBarButtonItems:)];
});
}
效果好了一些,但是過渡還是不夠自然
右側(cè)rightBarButtonItem
設(shè)置右側(cè)rightBarButtonItem的時候,xcode26運行時,默認回給右側(cè)加一個間距,如果想消掉這個間距,加個fixView。另外不能約束以及frame一起布局,否色會被撐開
UIView *rightFixView = [[UIView alloc] init];
rightFixView.frame = CGRectMake(0, 0, 44, 44);
if ([Util isXcode26OrLater]) {
rightFixView.frame = CGRectMake(12, 0, 44, 44);
}
[rightView addSubview:rightFixView];
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:rightView];
關(guān)于iOS26廢棄delegate.window采用sceneDelegate去初始化窗口
項目中使用到一個debug調(diào)試的庫,拉了分支,做了適配
https://github.com/LxManMan0807/LLDebugTool/tree/fix_sceneWindow
關(guān)于sceneDelegate初始化的窗口橫豎屏適配
之前是不需要設(shè)置支持橫屏的,現(xiàn)在是都要設(shè)置了
if (@available(iOS 16.0, *)) {
UIInterfaceOrientationMask orieMask = [self convertInterfaceOrientation:self.orientation];
UIViewController *currentVC = [self getCurrentViewController];
if (!currentVC) return;
UINavigationController *nav = currentVC.navigationController;
UIViewController *targetVC = nav ?: currentVC;
[targetVC setNeedsUpdateOfSupportedInterfaceOrientations];
UIWindowScene *windowScene = (UIWindowScene *)currentVC.view.window.windowScene;
if (!windowScene) return;
UIWindowSceneGeometryPreferencesIOS *preferences = [[UIWindowSceneGeometryPreferencesIOS alloc]initWithInterfaceOrientations:orieMask];
[windowScene requestGeometryUpdateWithPreferences:preferences errorHandler:^(NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
未完待續(xù)...