Xcode13适配iOS15

1.Navigationbar

在iOS15中,UINavigationBar默认是透明的,首次显示的时候会以边缘外观样式的形式展示

ios14 ios15 navigationbar对比如下图


image

scrollEdgeAppearance 适配方式:

///Describes the appearance attributes for the navigation bar to use when an associated UIScrollView has reached the edge abutting the bar (the top edge for the navigation bar). If not set, a modified standardAppearance will be used instead.
@property (nonatomic, readwrite, copy, nullable) UINavigationBarAppearance *scrollEdgeAppearance UI_APPEARANCE_SELECTORAPI_AVAILABLE(ios(13.0));
- (void)newNavBarConfig{
    
    UINavigationBar* navigationBar = self.navigationController.navigationBar;

    UINavigationBarAppearance* barApp = [[UINavigationBarAppearance alloc] init];
    //字体的样式
    barApp.titleTextAttributes = @{
        NSFontAttributeName: [UIFont systemFontOfSize:30],
        NSForegroundColorAttributeName: [UIColor blueColor]
    };
    //改变返回按钮的样式
    UIBarButtonItemAppearance* backAppearance = [[UIBarButtonItemAppearance alloc] initWithStyle:UIBarButtonItemStylePlain];
    UIBarButtonItemStateAppearance* normarl = backAppearance.normal;
    normarl.titleTextAttributes = @{
        NSFontAttributeName: [UIFont systemFontOfSize:30],
        NSForegroundColorAttributeName: [UIColor redColor]
    };
    barApp.backButtonAppearance = backAppearance;
    [barApp setBackIndicatorImage:[UIImage imageNamed:@"search@2x"] transitionMaskImage:[UIImage imageNamed:@"search@2x"]];
    //Done按钮的样式
    UIBarButtonItemAppearance* doneppearance = [[UIBarButtonItemAppearance alloc] initWithStyle:UIBarButtonItemStyleDone];
    UIBarButtonItemStateAppearance* normarl1 = doneppearance.normal;
    normarl1.titleTextAttributes = @{
        NSFontAttributeName: [UIFont systemFontOfSize:20],
        NSForegroundColorAttributeName: [UIColor blackColor]
    };
    barApp.doneButtonAppearance = doneppearance;
    //设置背景图片
    barApp.backgroundImageContentMode = UIViewContentModeScaleAspectFit;
    barApp.backgroundImage = [UIImage imageNamed:@"背景"];
    //常规样式
    navigationBar.standardAppearance = barApp;
    
    //边缘外观样式
    barApp.shadowColor = [UIColor clearColor];
    barApp.shadowImage = [UIImage new];
    barApp.backgroundImage = nil;
    barApp.backgroundColor = [UIColor greenColor];
    navigationBar.scrollEdgeAppearance = barApp;
}


适配方案:

在navvbar首次显示的时候,将以前的样式配置,统一更换成UINavigationBarAppearance配置。并且赋值给standardAppearance普通外观样式 , 且让scrollEdgeAppearance = standardAppearance。

2.Tabbar

tabbar的问题和navigationBar的问题属于同一类,tabbar背景颜色设置失效,字体设置失效,阴影设置失效问题.
同时也新增scrollEdgeAppearance属性,当关联的scrollview滑动到最底部的时候,tabbar的scrollEdgeAppearance边缘外观属性被展示出来。

- (void)setNewBarConfig{
    UITabBarAppearance* appBar = [[UITabBarAppearance alloc] init];
    appBar.backgroundColor = [UIColor redColor];
    appBar.stackedLayoutAppearance.normal.titleTextAttributes = @{
        NSFontAttributeName: [UIFont systemFontOfSize:20],
        NSForegroundColorAttributeName: [UIColor whiteColor]
   };
    appBar.stackedLayoutAppearance.selected.titleTextAttributes = @{
        NSFontAttributeName: [UIFont systemFontOfSize:30],
        NSForegroundColorAttributeName: [UIColor purpleColor]
   };
//    appBar.backgroundImage = [UIImage imageNamed:@"背景"];//依然有效
    self.tabBar.scrollEdgeAppearance = appBar;
    appBar.backgroundColor = [UIColor greenColor];
    appBar.shadowColor = [UIColor clearColor];
    self.tabBar.standardAppearance = appBar;
}

适配方案:

在tabbar首次显示的时候,将以前的样式配置,统一更换成UITabBarAppearance配置。并且赋值给standardAppearance普通外观样式 。

3.sheetPresentationController

通过它可以控制 Modal 出来的 UIViewController 的显示大小,且可以通过拖拽手势在不同大小之间进行切换。只需要在跳转的目标
large 模式 medium模式


image
- (void)enterNextPage3{
    Test2ViewController* VC = [Test2ViewController new];
    UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:VC];
    UISheetPresentationController* sheet =  nav.sheetPresentationController ;
    sheet.detents = @[[UISheetPresentationControllerDetent largeDetent],[UISheetPresentationControllerDetent mediumDetent]];//同时存在large模式和medium模式
    sheet.prefersGrabberVisible = YES;//顶部出现一个抓取器
    [self presentViewController:nav animated:YES completion:nil];
}


4.UIButtonConfiguration

UIButton支持更多配置。UIButton.Configuration是一个新的结构体,它指定按钮及其内容的外观和行为。它有许多与按钮外观和内容相关的属性,如cornerStyle、baseForegroundColor、baseBackgroundColor、buttonSize、title、image、subtitle、titlePadding、imagePadding、contentInsets、imagePlacement等。

- (void)newBtn{
    
    NSMutableAttributedString *attributedTitle = [[NSMutableAttributedString alloc] initWithString:@"登录"];
    [attributedTitle setAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:30],NSForegroundColorAttributeName:[UIColor yellowColor]} range:NSMakeRange(0, 1)];
    [attributedTitle setAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15],NSForegroundColorAttributeName:[UIColor blueColor]} range:NSMakeRange(1, 1)];

    UIButtonConfiguration *  configuration = [UIButtonConfiguration tintedButtonConfiguration];
//    configuration.attributedTitle = attributedTitle;
    configuration.title = @"登录";
    configuration.subtitle = @"请输入账号";
    configuration.image = [UIImage imageNamed:@"search"];
    configuration.imagePadding = 30;//
    
    
    configuration.cornerStyle = UIButtonConfigurationCornerStyleLarge;
    //二段文字的间距
    configuration.titlePadding = 20;
    //图片与文本的间距
    configuration.imagePadding = 20;
    //文本的居中方式
    configuration.titleAlignment = UIButtonConfigurationTitleAlignmentCenter;
    //图片显示的位置(上下左右)
    configuration.imagePlacement =  NSDirectionalRectEdgeTrailing;
    //背景色
    configuration.baseBackgroundColor = [UIColor yellowColor];
    //自带的button大小
//    configuration.buttonSize = UIButtonConfigurationSizeLarge;
    //文字的颜色
    configuration.baseForegroundColor = [UIColor redColor];
    //内容的间距
    configuration.contentInsets = NSDirectionalEdgeInsetsMake(30, 30, 30, 30);

    
    configuration.activityIndicatorColorTransformer = ^UIColor * _Nonnull(UIColor * _Nonnull color) {
        return [UIColor blueColor];
    };
    //
//     configuration.showsActivityIndicator = YES;

    UIButton* btn = [UIButton buttonWithConfiguration:configuration primaryAction:nil];
    [self.view addSubview:btn];
    [btn addTarget:self action:@selector(update:) forControlEvents:UIControlEventTouchUpInside];
    //样式、状态变化回调(选中、未选中、高亮......)
    btn.configurationUpdateHandler = ^(UIButton* btn){
        
        //或者处理其他的逻辑(比如当用户名和密码都同时存在的时候,即可改变状态)
        
        UIButtonConfiguration* config =  btn.configuration;
        if(config.showsActivityIndicator){
            config.title = @"正在加载中...";
        }else{
            config.title = @"登录";
        }
        btn.configuration = config;

    };
//当设置了config之后,下面的这些已经无效了
//    btn.titleLabel.textAlignment = NSTextAlignmentRight;
//    [btn.titleLabel setFont:[UIFont boldSystemFontOfSize:40]];
//    btn.subtitleLabel.font = [UIFont systemFontOfSize:5];
//    [btn.subtitleLabel setTextColor:[UIColor blackColor]];
    [btn sizeToFit];
    btn.center = CGPointMake(self.view.frame.size.width/4, self.view.center.y + 50);
    self.btn = btn;
//    btn.layer.cornerRadius = btn.frame.size.height/2;
//    btn.layer.masksToBounds = YES;
}

- (void)update:(UIButton*)btn{
    UIButtonConfiguration * con =  btn.configuration;
    con.showsActivityIndicator = !btn.configuration.showsActivityIndicator;
    btn.configuration = con;
}
image

5.UITableView

从 iOS 15 开始,TableView 增加sectionHeaderTopPadding属性,默认情况sectionHeaderTopPadding会有22个像素的高度,及默认情况,TableView section header增加22像素的高度

 self.tableView.sectionHeaderTopPadding = 0 

6.CLLocationButton

点击实现定位授权

- (void)locationBtn{
    CLLocationButton* btn = [[CLLocationButton alloc] init];
    btn.label = CLLocationButtonLabelCurrentLocation;
    btn.fontSize = 20;
    btn.icon = CLLocationButtonIconArrowFilled;
    btn.tintColor = [UIColor systemPinkColor];
    btn.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:btn];
    [btn sizeToFit];
    btn.userInteractionEnabled = YES;
    btn.layer.transform = CATransform3DMakeTranslation(100, 200, 0);

}


  • (void)locationBtn{
    CLLocationButton* btn = [[CLLocationButton alloc] init];
    btn.label = CLLocationButtonLabelCurrentLocation;
    btn.fontSize = 20;
    btn.icon = CLLocationButtonIconArrowFilled;
    btn.tintColor = [UIColor systemPinkColor];
    btn.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:btn];
    [btn sizeToFit];
    btn.userInteractionEnabled = YES;
    btn.layer.transform = CATransform3DMakeTranslation(100, 200, 0);

}

7.UIImage

开启线程执行裁剪功能,执行完毕之后要回到主线程去操作

    [image prepareThumbnailOfSize:CGSizeMake(50, 100) completionHandler:^(UIImage * _Nullable image) {
        //此处开启一个新线程进行
        NSLog(@"裁剪完毕%@",[NSThread currentThread]);
        dispatch_async(dispatch_get_main_queue(), ^{//回归到主线程
            [self afterImage:image];
        });
    }];


8.额外补充: cell.configurationUpdateHandler'

tableviewCell的样式配置UIListContentConfiguration、UIBackgroundConfiguration

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cellId"];
    
    UIListContentConfiguration * config = cell.defaultContentConfiguration ;
    UIBackgroundConfiguration * config2 = [UIBackgroundConfiguration listPlainCellConfiguration];
    config2.cornerRadius = 10;
    config2.backgroundColor = [UIColor purpleColor];
    config.text = [NSString stringWithFormat:@"样式内容%ld",indexPath.row];
    config.image = [UIImage imageNamed:@"search"];
    cell.contentConfiguration = config;//内容样式
    cell.backgroundConfiguration = config2;//背景样式

    cell.configurationUpdateHandler = ^(__kindof UITableViewCell * _Nonnull cell, UICellConfigurationState * _Nonnull state) {
        UIBackgroundConfiguration* confi = cell.backgroundConfiguration;
        NSLog(@"触发state.isSelected = %d,state.isSwiped = %d,state.isExpanded = %d,state.isHighlighted = %d,state.isFocused = %d,state.isReordering = %d state.isEditing = %d", state.isSelected,state.isSwiped,state.isExpanded,state.isHighlighted,state.isFocused,state.isReordering,state.isEditing);
        if(state.isSelected){//可以用来做”已读置灰的功能需求“,未必就是变颜色,或者是其他的交互
            confi.backgroundColor = [UIColor lightGrayColor];
        }else{
            confi.backgroundColor = [UIColor whiteColor];
        }
        if(state.isHighlighted == NO){//当不在高亮的时候 取消掉选中状态
            cell.selected = NO;
        }
        cell.backgroundConfiguration = confi;
    };
    cell.automaticallyUpdatesContentConfiguration = YES;
    cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];//优先级小于config
    return cell;
}


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容

  • 背景 按照往年新系统发布的时间规律,新的系统预计在9月20日左右发布,目前beta版本已经更新到beta6。想必都...
    冬冬吧阅读 15,444评论 17 20
  • 本文主要分享一下 iOS15 上适配方案,仅做开发记录使用,开发过程中通过使用陆续增加。 iOS15 的适配,很重...
    smile丽语阅读 5,250评论 11 24
  • 本文作为自己准备适配iOS15所用,在开始适配之前,先去学习各位同学的文章,记录在此备用。 1、导航栏UINavi...
    iOS_zy阅读 14,365评论 5 61
  • 苹果前两天推出了iOS 15。秋天都等不及~~ 相关链接:ios 15.0 适配问题:NavigationBar和...
    阳光下的叶子呵阅读 7,756评论 3 13
  • 对于iOS15适配汇总以及遇到的问题 注意:以下适配内容,必须适配的会以"必须"标出 UITableView Se...
    HF_K阅读 2,857评论 1 4