IOS11新特性与兼容适配

2020-01-21 02:41:36王冬梅

2.2.3. viewLayoutMarginsDidChange方法

根视图的边距变更时会触发该方法的回调。可以通过该方法来处理当边距改变时子视图的布局。

2.2.4. viewSafeAreaInsetsDidChange方法

当视图的安全区域发生变更时会触发该方法的回调。可以通过该方法来处理安全区域变更时的子视图布局。

3. UINavigationBar变化

iOS 11中加入了大标题模式,其显示效果如下所示:

IOS11,新特性,兼容,适配

大标题效果图

实现该效果需要将导航栏的prefersLargeTitles设置为YES,如:

self.navigationController.navigationBar.prefersLargeTitles = YES;

4. UINavigationItem变化

4.1 控制大标题的显示

如果你想控制每个视图的大标题是否显示,这需要使用UINavigationItem的largeTitleDisplayMode属性来控制大标题的显示。该属性为枚举类型,定义如下:


typedef NS_ENUM(NSInteger, UINavigationItemLargeTitleDisplayMode)
{ 
/// 自动模式,会继承前一个NavigationItem所设置的模式
UINavigationItemLargeTitleDisplayModeAutomatic,
/// 当前 Navigationitem 总是启用大标题模式
UINavigationItemLargeTitleDisplayModeAlways,
/// 当前 Navigationitem 总是禁用大标题模式
UINavigationItemLargeTitleDisplayModeNever,
}

根据上面的描述,可以在VC初始化init或者awakeFromNib方法中设置显示图标模式:


self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAlways;

4.2 控制搜索控制器

iOS 11 中新增了两个属性searchController和hidesSearchBarWhenScrolling。这两个属性主要用于简化VC对UISearchController的集成以及视觉优化。其中searchController属性用于指定当前VC的一个搜索控制器。而hidesSearchBarWhenScrolling属性则用于控制当视图滚动时是否隐藏搜索栏的UI,当该值为YES时,搜索栏只有在内容视图(UIScrollView及其子类)顶部是才会显示,在滚动过程中会隐藏起来;当该值为NO时,则不受滚动影响一直显示在导航栏中。具体的代码实现如下:


- (void)awakeFromNib
{
[super awakeFromNib];
//设置SearchController到navigationItem
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self];
self.navigationItem.searchController = self.searchController;
self.navigationItem.hidesSearchBarWhenScrolling = YES;
}

IOS11,新特性,兼容,适配

IOS11,新特性,兼容,适配

搜索栏隐藏后效果

5. UIScrollView变化