car*_*yot 18 objective-c uiviewcontroller ios presentviewcontroller uipresentationcontroller
我提出了一个UIViewController
使用自定义转换和自定义UIPresentationController
.视图控制器的视图不会覆盖整个屏幕,因此呈现视图控制器仍然可见.
接下来,我UIImagePickerController
在此视图控制器的顶部提供一个实例.问题是,当我关闭图像选择器时,呈现视图控制器的框架覆盖整个屏幕而不是我想要它覆盖的部分.frameOfPresentedViewInContainerView
在我的自定义中指定的框架UIPresentationController
似乎完全被忽略.
仅当存在与所述图像拾取器modalPresentationStyle
的UIModalPresentationOverCurrentContext
我的帧保持不变(因为没有视图从视图层次结构在第一位置去除这是有意义的).不幸的是,这不是我想要的.我希望图像选择器全屏显示,无论出于何种原因,它似乎搞乱了我的布局.我可能做错了什么或遗忘在这里?有什么建议?
Tho*_*eek 16
我尝试了两种提到的包装方法.使用这种包装方法的一个副作用是设备旋转不能很好地显示 - 在呈现的视图周围引入黑框.
而不是做包装技巧,尝试设置modalPresentationStyle
呈现UIImagePickerController
的UIModalPresentationOverFullScreen
.这意味着在演示/解雇期间,不会从视图层次结构中删除/恢复图像选择器下方的视图.
这是预期的,因为全屏演示不会恢复由计算得出的原始帧frameOfPresentedViewInContainerView
。\n解决此问题的推荐方法是创建一个包装视图,您将在其中插入所呈现的视图控制器的视图。以下是自定义演示控制器的相关代码:
- (void)presentationTransitionWillBegin {\n // wrapper is a property defined in the custom presentation controller.\n self.wrapper = [UIView new];\n [self.wrapper addSubview:self.presentedViewController.view];\n}\n\n- (CGRect)frameOfPresentedViewInContainerView {\n CGRect result = self.containerView.frame;\n\n // In this example we are doing a half-modal presentation\n CGFloat height = result.size.height/2;\n result.origin.y = height;\n result.size.height = height;\n\n return result;\n}\n\n- (UIView *)presentedView {\n return self.wrapper;\n}\n\n- (BOOL)shouldPresentInFullscreen {\n return NO;\n}\n\n- (void)containerViewWillLayoutSubviews {\n self.wrapper.frame = self.containerView.frame;\n self.presentedViewController.view.frame = [self frameOfPresentedViewInContainerView];\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n请注意,我们覆盖presentedView
以返回包装器视图,而不是呈现的视图控制器视图的默认值 \xe2\x80\x93 。这样,即使第二个呈现修改了包装器的框架,呈现的视图控制器的视图也不会改变。
归档时间: |
|
查看次数: |
2379 次 |
最近记录: |