随着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/