两天前在WWDC上苹果发布了iOS11 beta1版本,让我们看下导航栏、搜索框和TableView有什么不一样的地方。
正常的导航栏
![](https://img.haomeiwen.com/i6162564/d0adb78b59c305ea.jpeg)
iOS11的导航栏
在viewDidLoad中加一段代码
override func viewDidLoad() {
super.viewDidLoad()
createData()
// Navigation Bar
navigationController?.navigationBar.prefersLargeTitles = true
}
就可以得到这样的效果
![](https://img.haomeiwen.com/i6162564/40e647b8a8faf539.gif)
向下滑动Title变成正常的状态,向上滑动Title变大
现在点击一个cell进入下一个ViewController
![](https://img.haomeiwen.com/i6162564/df9f6ff96aa28800.jpeg)
在NavigationController下的所有VC的Title都改变了
我们可以在一个VC中单独设置Title的样式
在需改修改Title样式的VC中设置navigationItem.largeTitleDisplayMode属性来改变Title的类型
override func viewDidLoad() {
super.viewDidLoad()
// 自动设置
// navigationController?.navigationItem.largeTitleDisplayMode = .automatic
// 大标题
// navigationController?.navigationItem.largeTitleDisplayMode = .always
// 小标题
navigationController?.navigationItem.largeTitleDisplayMode = .never
}
现在Title变成原始状态了
![](https://img.haomeiwen.com/i6162564/af275db22782af87.jpeg)
Tip:上述的代码可以在Xcode9中的storyboard上直接设置
iOS11的搜索框
添加一个搜索框
override func viewDidLoad() {
super.viewDidLoad()
createData()
// Navigation Bar
navigationController?.navigationBar.prefersLargeTitles = true
// Search Controller
let mySearchController: UISearchController = UISearchController(searchResultsController: UIViewController())
navigationItem.searchController = mySearchController
}
效果图
![](https://img.haomeiwen.com/i6162564/203365da4d114a86.gif)
可以看到搜索框会下拉出现,上拉隐藏,这些系统都帮我们做好了,我们只需要设置一下就可以有这样的效果
iOS11的UITableView
UITableView多了两个代理方法
override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
先看下效果
![](https://img.haomeiwen.com/i6162564/16ba40fba8cf5dbd.gif)
我们可以看到iOS11中多了从左侧划出来的action
大幅度向一个方向滑动会直接触发action
具体的实现方法
/// 从左侧划出
override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let action = UIContextualAction(style: .normal, title: "Mark") { (action, view, handler) in
self.updateMarkState(for: indexPath)
handler(true)
}
action.backgroundColor = UIColor(colorLiteralRed: 73/255.0, green: 175/255.0, blue: 254/255.0, alpha: 1)
if markState(for: indexPath) {
action.title = "Unmark"
action.backgroundColor = UIColor.red
}
let configuration = UISwipeActionsConfiguration(actions: [action])
return configuration
}
/// 从右侧划出
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let action = UIContextualAction(style: .destructive, title: "Delete") { (action, view, handler) in
self.removeItem(at: indexPath)
handler(true)
}
let configuration = UISwipeActionsConfiguration(actions: [action])
return configuration
}
可以设置多个action
let configuration = UISwipeActionsConfiguration(actions: [action, ...])
上述的3个特性仅在iOS11上有效
如果要兼容低版本需要判断当前系统的版本
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
} else {
// Fallback on earlier versions
}
网友评论