随着wwdc17以及apple 2017秋季新品发布会的召开,apple也在9月20日正式推送了ios 11的正式版。在ios 11中,apple也推出了全新的ui风格。

ui风格
在ios 11中,系统app使用了这种ui风格。这种风格最明显的变化就是使用了ios 11的新特性--large title和新的searchcontroller。
demo
github: largertitledemo

large title & table view
设置lager title
app全局使用large title
?| 1 2 3 4 5 6 7 8 9 10 |
- (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions {
// override point for customization after application launch.
// 设置large title偏好为true。
if (@available(ios 11.0, *)) {
[[uinavigationbar appearance] setpreferslargetitles:true];
} else {
// fallback on earlier versions
}
return yes;
}
|
单个viewcontroller使用larger title
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
- (void)viewwillappear:(bool)animated {
[super viewwillappear:animated];
// 设置large title偏好为yes。
if (@available(ios 11.0, *)) {
[self.navigationcontroller.navigationbar setpreferslargetitles:yes];
} else {
// fallback on earlier versions
}
}
- (void)viewwilldisappear:(bool)animated {
[super viewwilldisappear:animated];
// 设置large title偏好为no。
if (@available(ios 11.0, *)) {
[self.navigationcontroller.navigationbar setpreferslargetitles:no];
} else {
// fallback on earlier versions
}
}
|
使用上述代码设置后,即可开启large title的显示。
添加table view

在storyboard添加tableview
在xcode 9中,xib和storyboard默认会添加 safe area(安全区) ,而添加在controller的view上控件的约束也不再以supview为准,而是以safe area为准。
safe area是在ios 9中添加的特性。如果你不需要使用safe area,或需要在旧版本的app中添加safe area,可以在xib或storyboard的右侧边栏中“show the file inspector”标签下对“use safe area layout guides”选项下进行勾选,以添加或删除safe area。

添加refresh control
refresh control是系统的下拉刷新控件,配合table view使用,以实现系统的下拉刷新效果。
?| 1 2 3 4 5 6 7 |
uirefreshcontrol *refreshcontrol = [[uirefreshcontrol alloc]init];
[refreshcontrol addtarget:self action:@selector(beginrefresh:) forcontrolevents:uicontroleventvaluechanged];
if (@available(ios 10.0, *)) {
[self.tableview setrefreshcontrol:refreshcontrol];
} else {
// fallback on earlier versions
}
|
刷新完成调用 - (void)endrefreshing ns_available_ios(6_0); 结束刷新状态。
search controller
添加搜索栏
?| 1 2 3 4 5 6 |
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造成应用崩溃
?| 1 2 3 4 5 |
if (@available(ios 10.0, *)) {
// code...
} else {
// fallback on earlier versions
}
|
在实际开发中,在viewcontroller上添加tableview实现效果不够理想,在滑动过程中有明显卡顿。而直接使用tableviewcontroller实现效果最为理想,滑动无卡顿现象。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.zlucy.com/archives/258/








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。