xcode 26 適配

羅列一些我這邊的適配點,慢慢補充

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ù)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 最近公司的很多流量產(chǎn)品需要適配iOS 11 和iPhone X,由于公司的iPhone X到的比較晚,拖了好...
    花了個缺閱讀 875評論 0 2
  • Table of Contents iOS11 適配一、Large Title View二、導(dǎo)航欄1. 圖層變化2...
    Vinc閱讀 1,843評論 1 5
  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,694評論 2 4
  • 一、定位失效 蘋果新增加了一項NSLocationAlwaysAndWhenInUseUsageDescripti...
    冷武橘閱讀 484評論 0 0
  • 什么是 UIViewController UIViewController: 使用數(shù)據(jù)( Model )來構(gòu)造視圖...
    WesleyLien閱讀 1,237評論 1 2

友情鏈接更多精彩內(nèi)容