在iOS中,segue的class为UIStoryboardSegue
,用于storyboard中不同视图控制器间转场,即从一个视图控制器转场到另一个视图控制器。Segue的起点必须是一个view或者定义某些操作的对象,如:UIBarButtonItem
、UIControl
和UIGestureRecognizer
。
Segue分为以下几种类型,其中Push、Modal、Popover和Replace已弃用。
-
Show
-
Show Detail
-
Present Modally
-
Present as Popover
-
Custom
-
Push
-
Modal
-
Popover
-
Replace
在iPhone中有Show、Show Detail、Present Modally、Custom四种不同类型,iPad中有Show、Show Detail、Present Modally、Present as Popover、Custom五种不同类型。
我想要阐释的是Present as Popover,在iPhone和iPad上为两种展开模式,swift代码实现如下:
let navigationFilterVc = UIStoryboard(name: "Search", bundle: currentBundle).instantiateViewController(withIdentifier: "SearchViewController") as? UINavigationController
if let navVc = navigationFilterVc,let filterVc = navVc.children.first as? TeacherFilterContainerViewController {
//这个模式只在iPad上生效
navVc.modalPresentationStyle = .popover
let popoverPresentationController = navVc.popoverPresentationController
if let _popoverPresentationController = popoverPresentationController{
_popoverPresentationController.barButtonItem = barButton
_popoverPresentationController.sourceView = self.view
//修改弹出来的popView的大小
let size = _popoverPresentationController.sourceRect.size
navVc.preferredContentSize = CGSize(width: size.width, height: size.height + 800)
}
self.present(navVc, animated: true, completion: nil)
}
效果如下图所示