如何更改模式对话框的大小?为什么这不起作用?
SlingDialogViewController *slingDialog = [[SlingDialogViewController alloc] init];
slingDialog.modalPresentationStyle = UIModalPresentationFormSheet;
slingDialog.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
slingDialog.view.superview.frame = CGRectMake(0, 0, 900, 700);
[self presentModalViewController:slingDialog animated:YES];
这样做:
SlingDialogViewController *slingDialog = [[SlingDialogViewController alloc] init];
slingDialog.modalPresentationStyle = UIModalPresentationFormSheet;
slingDialog.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:navController animated:YES completion:nil];
slingDialog.view.superview.frame = CGRectMake(0, 0, 900, 700);
slingDialog.view.superview.center = self.view.center;
首先打电话给
presentViewController:animated:completion
很重要,至少根据我的经验。
iOS 中的模态控制器具有固定的大小。我不建议尝试更改它们,它永远不会可靠地工作。
解决方法是自己实施。模态(呈现)控制器是一个非常简单的功能:
视图与呈现控制器重叠,因此无法单击它(并且它会使内容变暗以使它们看起来像背景)
子视图控制器(及其视图)添加到您的控制器。
基于 mprivat 在控制器中的回答:
override func viewIsAppearing(_ animated: Bool) {
super.viewIsAppearing(animated)
guard let superview = view.superview else {
return
}
let intrinsicHeight = self.view.bounds.height
let adjusted = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: intrinsicHeight)
let height = superview.bounds.size.height
superview.frame = adjusted
if var center = presentingViewController?.view.center {
center.y = superview.bounds.size.height + intrinsicHeight / 2
superview.center = center
}
}
这适用于第三代 SE 上的 iOS 16.7.1。 原始解决方案对我不起作用。