美文网首页
iOS 11新特性 - LargeTitle

iOS 11新特性 - LargeTitle

作者: 码代码的小马 | 来源:发表于2017-12-13 18:31 被阅读1098次

    更新了iOS11之后,系统APP大量使用了新的UI风格,那就是iOS11的新特性-Large Title和新的SearchController

    Large Title & Table View

    设置Large Title

    • APP全局使用LargeTitle
        //设置Large Title
        if (@available(iOS 11.0, *)) {
            [[UINavigationBar appearance]setPrefersLargeTitles:true];
        } else {
            // Fallback on earlier versions
        }
    
    • 单个ViewController使用Large Title
       - (void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
        //设置Large Title偏好设置为True
        if (@available(iOS 11.0, *)) {
            [self.navigationController.navigationBar setPrefersLargeTitles:true];
        } else {
            // Fallback on earlier versions
        }
    }
    
    - (void)viewWillDisappear:(BOOL)animated{
        [super viewWillDisappear:animated];
        //设置Large Title偏好设置为false
        if (@available(iOS 11.0, *)) {
            [self.navigationController.navigationBar setPrefersLargeTitles:false];
        } else {
            // Fallback on earlier versions
        }
    }
    

    使用上述代码设置后,即可开启Large Title的显示

    //设置Title
    [self setTitle:@"title"];
    

    添加Table View

    1513159623621.jpg

    在Xcode 9 中,XIBStoryBoard默认会添加Safe Area(安全区),而添加在Controller的view上控件的约束也不再以superview为准,而是以Safe Area为准

    Safe Area是在iOS 9 中添加的特性,如果你不需要使用Safe Area,或者需要在旧版本的APP中添加Safe Area,可以在XIB或StoryBoard的右侧边栏中Show The File inspector标签的Interface builder Document栏下对Use Safe Area Layout Guides进行勾选,以添加或删除Safe Area

    屏幕快照 2017-12-13 18.17.37.png

    添加Refresh Control

    Refresh Control 是系统的下拉刷新控件,配合UITableView使用,以实现系统的下拉属性效果

        self.refreshControl = [[UIRefreshControl alloc]init];
        [self.refreshControl addTarget:self action:@selector(refreshControlAction) forControlEvents:UIControlEventValueChanged];
        if (@available(iOS 11.0, *)) {
            [self.tableView setRefreshControl:self.refreshControl];
        } else {
            // Fallback on earlier versions
        }
    

    刷新完成调用- (void)endRefreshing NS_AVAILABLE_IOS(6_0);结束刷新

    - (void)refreshControlAction{
        NSLog(@"refreshcontrolAction");
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self.refreshControl endRefreshing];
        });
    }
    

    Search Controller

    添加搜索栏

        if (@available(iOS 11.0, *)) {
            UISearchController *searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
            self.navigationItem.searchController = searchController;
        } else {
            // Fallback on earlier versions
        }
    

    关于Search Controller的使用再次不在累赘,可参考官方Sample Code Table Search with UISearchController

    再说几句

    • 由于Large Title及一些API仅在iOS 11提供,所以在使用前均添加了判断,以防止低版本系统调用高版本API造成应用崩溃
    if (@available(iOS 10.0, *)) {
        // Code...
    } else {
        // Fallback on earlier versions
    }
    
    • 在实际开发中,在ViewController上添加TableView实现效果不够理想,在滑动过程中有明显卡顿,而直接使用TableViewController实现效果最为理想,滑动无卡顿现象

    相关文章

      网友评论

          本文标题:iOS 11新特性 - LargeTitle

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