我有一个UIViewController
,它是使用自定义过渡效果显示的,根据设计,它只能填充屏幕高度的90%。
这看起来不错,而且我从来没有任何问题。我们将其称为“视图A”。现在,我试图在此之上显示全屏模式视图,我们将其称为“视图B”。这种外观有效,但是当视图B被关闭时,视图A再次出现,但已展开以填充视图B。屏幕的整个边界。
这是我正在使用的演示代码:
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
...
// Presentation
const CGFloat viewHeight = (screenBounds.size.height * 0.9);
const CGRect beginFrame = CGRectMake(0, screenBounds.size.height, screenBounds.size.width, viewHeight);
const CGRect finalFrame = CGRectMake(0, (screenBounds.size.height - viewHeight), screenBounds.size.width, viewHeight);
// Dim
self.dimmedView.alpha = 0.0;
[transitionContext.containerView addSubview:self.dimmedView];
[transitionContext.containerView addConstraints:[NSLayoutConstraint allConstraintsFromViewToSuperview:self.dimmedView inset:UIOffsetZero]];
// Prepare
UIView * const toView = toVC.view;
toView.frame = beginFrame;
[transitionContext.containerView addSubview:toView];
// Animate
[UIView animateWithDuration:kAnimationDuration delay:0.0 usingSpringWithDamping:0.8 initialSpringVelocity:0.25 options:0 animations:^{
toView.frame = finalFrame;
self.dimmedView.alpha = 0.6;
self.tabBarController.view.layer.cornerRadius = 8.0;
self.tabBarController.view.transform = CGAffineTransformMakeScale(0.95, 0.95);
} completion:^(BOOL finished) {
[transitionContext completeTransition:!transitionContext.transitionWasCancelled];
[offshootView removeFromSuperview];
}];
...
}
以前有人看过吗,知道如何停止调整视图A的大小吗?
答案 0 :(得分:0)
我认为问题是您修改了视图控制器根视图的大小,尽管它是由视图控制器处理的。 UIViewController
的文档说:
视图控制器的根视图的大小始终适合其分配的大小 空间。
为什么不将另一个(完全透明的)视图作为子视图添加到放置所有内容的根视图中?这样一来,您可以将根视图保持在100%,同时根据需要将新视图的大小更改为90%。如果我对您的理解正确,那么无需触摸根视图即可完成相同的操作。
为此,您应该在Storyboard属性检查器中将视图控制器的Presentation属性设置为Over Full Screen
。如果要通过代码进行设置,请设置视图控制器的.modalPresentationStyle = UIModalPresentationOverFullScreen
。通过设置此选项,底层的视图控制器将在您呈现视图控制器之后保留在屏幕上,并在您的视图具有透明性的地方继续显示。