点击按钮跳转时如何设置通过segue弹出的ViewController的高度
自定义Segue跳转后ViewController高度的实现方法
你目前使用Segue关联跳转的场景,可以通过以下两种方案实现RegisterViewController的自定义高度配置:
方案一:在跳转源控制器(LoginViewController)中通过Segue生命周期配置
- 首先打开Storyboard,选中LoginViewController到RegisterViewController的Segue连线,在右侧属性检查器中为Segue设置唯一标识符,比如
toRegister
- 在LoginViewController中实现
prepare(for:sender:)方法,对跳转目标控制器做高度配置,适配全iOS版本的代码如下:
class LoginViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard segue.identifier == "toRegister", let registerVC = segue.destination as? RegisterViewController else { return } // iOS15及以上使用系统Sheet配置,支持更多自定义效果 if let sheetController = registerVC.sheetPresentationController { // 自定义高度可直接修改数值,比如改为300、400,也可以按屏幕高度比例计算 sheetController.detents = [.custom { context in // 示例:设置为屏幕高度的40% return context.maximumDetentValue * 0.4 }] // 可选配置:显示顶部拖拽小抓条 sheetController.prefersGrabberVisible = true } else { // iOS15以下适配方案 registerVC.modalPresentationStyle = .formSheet registerVC.preferredContentSize = CGSize(width: UIScreen.main.bounds.width, height: 300) } } }
方案二:直接在RegisterViewController内部配置固定高度
如果要求所有场景下跳转进入RegisterViewController都使用固定高度,可以直接在RegisterViewController内部配置:
class RegisterViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() if let sheetController = self.sheetPresentationController { sheetController.detents = [.custom { _ in 300 }] } else { self.modalPresentationStyle = .formSheet self.preferredContentSize = CGSize(width: view.frame.width, height: 300) } } }
配置完成后弹出的RegisterViewController就会按照你设置的高度展示,不会出现高度过高的问题:
内容的提问来源于stack exchange,提问作者user16489264
相关产品推荐
相关产品推荐

