美文网首页iOS Developer
iOS11 Xcode9 更新适配

iOS11 Xcode9 更新适配

作者: 吃屁的小栗子 | 来源:发表于2017-09-21 14:26 被阅读314次

    随着iPhone 8和iPhone X 以及iOS 11 的发布更新,更新适配的工作又开始了😶

    首先更新到了Xcode 9 ,具体暂时发现了以下新功能

    无线调试

    😆 😆 看见旁边的安卓调试还在用数据线连接顿时感觉高大上有没有!!
    想使用无线调试的首要条件是更新到Xcode 9 和 iOS 11
    然后按图所示打开


    image.png

    勾选上Connect via network


    image.png
    当左边有小地球的时候表示已经连接
    然后可以拔掉数据线,开始装13之旅!

    ⚠️ ⚠️ 如果有报错,请先将手机设置密码,然后连接上在取消就好了,具体的报错内容忘记保存了😂 😂

    多个模拟器调试

    Xcdoe 9可以允许多个模拟器同时运行调试
    然后就可以左手一个iPhone 8 右手一个iPhone X

    快捷键更改

    以前快速进入方法command+鼠标单击
    现在会弹出一个菜单有不同的操作

    image.png

    如果想变回以前的操作


    image.png

    只需要设置一下就可以了

    新增AR开发

    image.png

    xcode 9手动带入第三方遇见的坑

    由于项目没有使用pod,最近发现有第三方更新,于是手动导入了一下,结果一直报错,后来发现是Build Phases --->Compile Sources 里面.m文件没有自动导入。。
    Xcode 9 的其他的暂时没有什么新发现,欢迎大家补充!!!

    下面介绍iOS 11 适配(不包括iPhone X)

    searchBar 变高

    以前使用self.navigationItem.titleView = searchBar; 的小伙伴会发现titleView 高度变高

    image.png

    我使用的解决方法是

    UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH - 80, 44)];
    //    container.backgroundColor = [UIColor redColor];
    mySearchBar.translatesAutoresizingMaskIntoConstraints = NO;
    [container addSubview:mySearchBar];
    //    self.navigationItem.titleView = container; 
    self.navigationItem.titleView = mySearchBar; 
    //    设成container会导致searchBar无响应事件,暂时还不清楚问题原因,
    [mySearchBar mas_makeConstraints:^(MASConstraintMaker *make) {
        make.width.equalTo(SCREEN_WIDTH - 100);
        make.height.equalTo(34);
        make.centerX.equalTo(container);
        make.centerY.equalTo(container);
    }];
    

    或者 使用 Navigation 集成的 UISearchController

     self.navigationItem.searchController = mySearchController;
    

    大标题的显示

    在UI NavigationBar中,新增了一个属性prefersLargeTitles,将该属性设置为ture,NavigationBar会显示大标题.

    navigationController?.navigationBar.prefersLargeTitles = true
    

    Tableview Footer Header View

    iOS 11 中发现之前设定的footerView 或者headerView 高度都变了。
    解决方法:
    如果调用了:

    #pragma mark tableview delegate
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
        return 10;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
        return 10;
    }
    

    方法必须实现:

    - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
        return nil;
    }
    
    -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
        return nil;
    }
    

    或者

    estimaterRowHeight = 0;
    estimaterSectionHeaderHeight = 0;
    estimaterSectionFooterHeight = 0;
    

    这是因为

    estimaterRowHeight
    estimaterSectionHeaderHeight
    estimaterSectionFooterHeight
    

    高度估算属性由默认0变成

    UITableViewAutomaticDimension
    

    所致

    iOS 11 导致的定位失败问题

    因为苹果现在增加了一项新的隐私保护功能

    NSLocationAlwaysAndWhenInUseUsageDeion
    

    并且原有的

    NSLocationAlwaysUsageDeion
    

    被降级为

    NSLocationWhenInUseUsageDeion。
    

    想要达到之前

    NSLocationAlwaysUsageDeion 
    

    的定位效果,需要在info.plist文件中添加

    NSLocationAlwaysAndWhenInUseUsageDeion 和 NSLocationWhenInUseUsageDeion
    

    两个就可以了

    iPhone X 适配注意事项

    1.隐藏导航栏的界面特别要注意,因为“耳朵”和 Safe Area 的原因,很有可能上面会露出小片空白。
    2.列表页如果没有 tabBar,而且列表页可以拉到最底下,请在列表页最后留一点空白给手势区域。
    3.列表页使用系统的 tabBar 那是完全自动适配的,但如果是自定义的 tabBar,请适当在 tabBar 底下留出空白给手势区域。

    暂时就发现这些问题,有兴趣的朋友建议大家去看看WWDC 传送门
    欢迎指正错误或者提出意见建议!

    相关文章

      网友评论

        本文标题:iOS11 Xcode9 更新适配

        本文链接:https://www.haomeiwen.com/subject/hurzsxtx.html